install.packages("Signac") #seurat addon for analyzing chromatin
library(hdf5r) #need to read h5 files
library(Seurat)
library(Signac)
library(ggplot2)
library(patchwork)
setwd("C:\\singlecell_atac")
getwd()
[1] "C:/singlecell_atac"

Pre-processing workflow

counts <- Read10X_h5("GSE190424_RAW\\Aged\\GSM5723632_Aged_HSC_filtered_peak_bc_matrix.h5")
# counts is a feature by cell matrix, here features are coordinates of peaks.
counts # 167771 features x 3694 cells
meta <- read.csv("GSE190424_RAW\\Aged\\GSM5723632_Aged_HSC_singlecell.csv.gz",
                 header=TRUE,
                 row.names = 1) 

meta
  chrom_assay <- CreateChromatinAssay(
  counts = counts,
  sep = c(":", "-"), # features (chr1:3670444-3672753, look in counts) are sep by : and ,
  genome = 'mm10', 
  fragments = 'GSE190424_RAW\\Aged\\GSM5723632_Aged_HSC_fragments.tsv.gz',
  min.cells = 10, # Keep peaks found in ≥10 cells.
  min.features = 200 # Keep cells with ≥200 peaks
)
Checking for 3694 cell barcodes
# Notes:
# 
# Make sure fragments and its index are in same folder
# Names of both files should match except for the .tbi
# for example: see below
list.files("GSE190424_RAW\\Aged")
[1] "GSM5723632_Aged_HSC_filtered_peak_bc_matrix.h5"
[2] "GSM5723632_Aged_HSC_fragments.tsv.gz"          
[3] "GSM5723632_Aged_HSC_fragments.tsv.gz.tbi"      
[4] "GSM5723632_Aged_HSC_singlecell.csv.gz"         

data <- CreateSeuratObject(
  counts = chrom_assay,
  assay = "peaks",
  meta.data = meta
)
data
An object of class Seurat 
148897 features across 3694 samples within 1 assay 
Active assay: peaks (148897 features, 0 variable features)
 2 layers present: counts, data
data[[]]

if (!require("BiocManager", quietly = TRUE))
    install.packages("BiocManager")

BiocManager::install("EnsDb.Mmusculus.v79") # EnsDb.Hsapiens.v86 for human
BiocManager::install("GenomeInfoDb") #translation between chromosome names
BiocManager::install("biovizBase")
library(EnsDb.Mmusculus.v79)
library(GenomeInfoDb)
# get all annotated mouse genes from Ensembl-based annotation database

annotations <- GetGRangesFromEnsDb(ensdb = EnsDb.Mmusculus.v79)
seqlevelsStyle(annotations) <- 'UCSC'

# Note: features have chr1 prefix which is UCSC-style chromosome names. 
annotations
GRanges object with 1763965 ranges and 5 metadata columns:
                     seqnames          ranges strand |              tx_id   gene_name
                        <Rle>       <IRanges>  <Rle> |        <character> <character>
  ENSMUSE00001236884     chr3 3508030-3508332      + | ENSMUST00000108393       Hnf4g
  ENSMUSE00000676606     chr3 3634150-3634347      + | ENSMUST00000108394       Hnf4g
  ENSMUSE00001345708     chr3 3638059-3638230      + | ENSMUST00000108393       Hnf4g
  ENSMUSE00001345708     chr3 3638059-3638230      + | ENSMUST00000108394       Hnf4g
  ENSMUSE00000149313     chr3 3641223-3641317      + | ENSMUST00000108393       Hnf4g
                 ...      ...             ...    ... .                ...         ...
  ENSMUST00000082414     chrM     10167-11544      + | ENSMUST00000082414      mt-Nd4
  ENSMUST00000082418     chrM     11742-13565      + | ENSMUST00000082418      mt-Nd5
  ENSMUST00000082419     chrM     13552-14070      - | ENSMUST00000082419      mt-Nd6
  ENSMUST00000082421     chrM     14145-15288      + | ENSMUST00000082421     mt-Cytb
  ENSMUST00000084013     chrM      9877-10173      + | ENSMUST00000084013     mt-Nd4l
                                gene_id   gene_biotype     type
                            <character>    <character> <factor>
  ENSMUSE00001236884 ENSMUSG00000017688 protein_coding     exon
  ENSMUSE00000676606 ENSMUSG00000017688 protein_coding     exon
  ENSMUSE00001345708 ENSMUSG00000017688 protein_coding     exon
  ENSMUSE00001345708 ENSMUSG00000017688 protein_coding     exon
  ENSMUSE00000149313 ENSMUSG00000017688 protein_coding     exon
                 ...                ...            ...      ...
  ENSMUST00000082414 ENSMUSG00000064363 protein_coding      cds
  ENSMUST00000082418 ENSMUSG00000064367 protein_coding      cds
  ENSMUST00000082419 ENSMUSG00000064368 protein_coding      cds
  ENSMUST00000082421 ENSMUSG00000064370 protein_coding      cds
  ENSMUST00000084013 ENSMUSG00000065947 protein_coding      cds
  -------
  seqinfo: 22 sequences (1 circular) from mm10 genome
Annotation(data) <- annotations

Computing QC Metrics

# 1. Look at the fragment length periodicity for all the cells
data <- NucleosomeSignal(object = data)
Found 3694 cell barcodes

Done Processing 1 million lines
Done Processing 2 million lines
Done Processing 3 million lines
Done Processing 4 million lines
Done Processing 5 million lines
Done Processing 6 million lines
Done Processing 7 million lines
Done Processing 8 million lines
Done Processing 9 million lines
                                                  
Done Processing 10 million lines
Done Processing 11 million lines
Done Processing 12 million lines
Done Processing 13 million lines
Done Processing 14 million lines
Done Processing 15 million lines
Done Processing 16 million lines
Done Processing 17 million lines
Done Processing 18 million lines
# Note:
# Signac looks at all fragments in each cell and bins them by length:
# Fragment length  Category
# 0–100 bp  Nucleosome-free (NFR)
# 180–247 bp    Mononucleosomal
# 315–473 bp    Dinucleosomal
# .........   .............

# Then calculate mononucleosomal/ nucleosome-free ratio

  
data$nucleosome_group <- ifelse(data$nucleosome_signal > 4, 'NS > 4', 'NS < 4')
unique(data$nucleosome_group)
[1] "NS < 4"
# no low-quality cells dominated by mononucleosomal fragments.
FragmentHistogram(object = data, 
                  group.by = 'nucleosome_group', 
                  region = 'chr1-1-10000000')


#Note:
# cells exhibit a pattern that is typical for a successful ATAC-seq experiment.
# 2. Calculate the TSS enrichment score for each cell
data <- TSSEnrichment(data, fast = FALSE)
# 3. Compute fraction of reads from blacklisted region
# in data[[]] there is a column blacklist_region_fragments
# number of fragments mapped to black list regions
data$blacklist_ratio <- data$blacklist_region_fragments / data$peak_region_fragments
data$pct_reads_in_peaks <- data$peak_region_fragments / data$passed_filters * 100 
vln <- VlnPlot(
  object = data,
  features = c('peak_region_fragments', 'pct_reads_in_peaks', 
                'blacklist_ratio', 'nucleosome_signal', 'TSS.enrichment'),
  pt.size = 0.1,
  ncol = 5
)
vln

Remove cells that are outliers for these QC metrics

data
An object of class Seurat 
148897 features across 3694 samples within 1 assay 
Active assay: peaks (148897 features, 0 variable features)
 2 layers present: counts, data
# option 1: Set manual thresholdsbased on the violin plot 
data_filtered <- subset(
  x = data,
  subset = peak_region_fragments > 3000 &
    peak_region_fragments < 40000 &
    pct_reads_in_peaks > 60 &
    blacklist_ratio < 0.02 &
    nucleosome_signal < 4 & 
    TSS.enrichment > 2
)

data_filtered
An object of class Seurat 
148897 features across 3493 samples within 1 assay 
Active assay: peaks (148897 features, 0 variable features)
 2 layers present: counts, data
# Option 2: Based on quantiles
low_prf <- quantile(data[["peak_region_fragments"]]$peak_region_fragments, probs = 0.02)
hig_prf <- quantile(data[["peak_region_fragments"]]$peak_region_fragments, probs = 0.98)

low_prp <- quantile(data[["pct_reads_in_peaks"]]$pct_reads_in_peaks, probs = 0.02)

high_blr <- quantile(data[["blacklist_ratio"]]$blacklist_ratio, probs = 0.98)

hig_ns <- quantile(data[["nucleosome_signal"]]$nucleosome_signal, probs = 0.98)

low_ts <- quantile(data[["TSS.enrichment"]]$TSS.enrichment, probs = 0.02)
print(low_prf)
     2% 
2280.18 
print(hig_prf)
     98% 
22501.22 
print(low_prp)
      2% 
69.90098 
print(high_blr)
       98% 
0.01488525 
print(hig_ns)
      98% 
0.8913645 
print(low_ts)
     2% 
3.73821 
data <- subset(
  x = data,
  subset = peak_region_fragments > low_prf &
    peak_region_fragments < hig_prf &
    pct_reads_in_peaks > low_prp &
    blacklist_ratio < high_blr &
    nucleosome_signal < hig_ns &
    TSS.enrichment > low_ts
)
data
An object of class Seurat 
148897 features across 3300 samples within 1 assay 
Active assay: peaks (148897 features, 0 variable features)
 2 layers present: counts, data

Normalization and linear dimensional reduction

data <- RunTFIDF(data)
data <- FindTopFeatures(data, min.cutoff = 'q0')
data
An object of class Seurat 
148897 features across 3300 samples within 1 assay 
Active assay: peaks (148897 features, 148897 variable features)
 2 layers present: counts, data
data <- RunSVD(data)
DepthCor(data)

# Note:
# Component 1 is strongly correlated to sequencing depth  (technical variation).
# rather than biological variation
# Remove this component

Non-linear dimension reduction and clustering

data <- RunUMAP(
  object = data,
  reduction = 'lsi',
  dims = 2:30
)

data <- FindNeighbors(
  object = data,
  reduction = 'lsi',
  dims = 2:30
)

data <- FindClusters(
  object = data,
  algorithm = 3,
  verbose = FALSE
)
DimPlot(object = data, label = TRUE, pt.size = 1) + NoLegend()

# Using data_filtered

data_filtered <- RunTFIDF(data_filtered)
data_filtered <- FindTopFeatures(data_filtered, min.cutoff = 'q0')
data_filtered <- RunSVD(object = data_filtered)

DepthCor(data_filtered)

data_filtered <- RunUMAP(
  object = data_filtered,
  reduction = 'lsi',
  dims = 2:30
)
Using method 'umap'
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
data_filtered <- FindNeighbors(
  object = data_filtered,
  reduction = 'lsi',
  dims = 2:30
)
data_filtered <- FindClusters(
  object = data_filtered,
  algorithm = 3,
  resolution = 1.2,
  verbose = FALSE
)

DimPlot(object = data_filtered, label = TRUE, pt.size = 1) + NoLegend()

# Note:
# One primary cluster - because data is from aged mice
# Many subclsuters within main cluster

Multiple samples

# Function with all the preprocessing steps and informative print messages
prepare_data <- function(count_path, meta_path, fragment_path){
  
  message("Step 1: Reading count data...")
  counts <- Read10X_h5(count_path)
  message("Count data loaded successfully.")
  
  message("Step 2: Reading metadata...")
  meta <- read.csv(meta_path,
                   header = TRUE,
                   row.names = 1)
  message("Metadata loaded successfully.")
  
  message("Step 3: Creating ChromatinAssay object...")
  chrom_assay <- CreateChromatinAssay(
    counts = counts,
    sep = c(":", "-"),
    genome = 'mm10',
    fragments = fragment_path,
    min.cells = 10,
    min.features = 200
  )
  message("ChromatinAssay created successfully.")
  
  message("Step 4: Creating Seurat object...")
  data <- CreateSeuratObject(
    counts = chrom_assay,
    assay = "peaks",
    meta.data = meta
  )
  message("Seurat object created successfully.")
  
  message("Step 5: Annotating data...")
  Annotation(data) <- annotations
  message("Annotation completed.")
  
  message("Step 6: Computing QC metrics (nucleosome signal, TSS enrichment, blacklist ratio, % reads in peaks)...")
  data <- NucleosomeSignal(object = data)
  data <- TSSEnrichment(object = data, fast = FALSE)
  data$blacklist_ratio <- data$blacklist_region_fragments / data$peak_region_fragments
  data$pct_reads_in_peaks <- data$peak_region_fragments / data$passed_filters * 100
  message("QC metrics computation completed.")
  
  message("Step 7: Calculating filtering thresholds...")
  low_prf <- quantile(data[["peak_region_fragments"]]$peak_region_fragments, probs = 0.02)
  hig_prf <- quantile(data[["peak_region_fragments"]]$peak_region_fragments, probs = 0.98)
  low_prp <- quantile(data[["pct_reads_in_peaks"]]$pct_reads_in_peaks, probs = 0.02)
  high_blr <- quantile(data[["blacklist_ratio"]]$blacklist_ratio, probs = 0.98)
  hig_ns <- quantile(data[["nucleosome_signal"]]$nucleosome_signal, probs = 0.98)
  low_ts <- quantile(data[["TSS.enrichment"]]$TSS.enrichment, probs = 0.02)
  message("Filtering thresholds calculated.")
  
  message("Step 8: Filtering data based on QC thresholds...")
  data <- subset(
    x = data,
    subset = peak_region_fragments > low_prf &
      peak_region_fragments < hig_prf &
      pct_reads_in_peaks > low_prp &
      blacklist_ratio < high_blr &
      nucleosome_signal < hig_ns &
      TSS.enrichment > low_ts
  )
  message("Data filtering completed.")
  
  message("All preprocessing steps completed successfully.")
  
  return(data)
}
aged <- prepare_data("GSE190424_RAW\\Aged\\GSM5723632_Aged_HSC_filtered_peak_bc_matrix.h5",
                     "GSE190424_RAW\\Aged\\GSM5723632_Aged_HSC_singlecell.csv.gz",
                     "GSE190424_RAW\\Aged\\GSM5723632_Aged_HSC_fragments.tsv.gz"
                     )
Checking for 3694 cell barcodes
Found 3694 cell barcodes

Done Processing 1 million lines
Done Processing 2 million lines
Done Processing 3 million lines
Done Processing 4 million lines
Done Processing 5 million lines
Done Processing 6 million lines
Done Processing 7 million lines
Done Processing 8 million lines
Done Processing 9 million lines
                                                  
Done Processing 10 million lines
Done Processing 11 million lines
Done Processing 12 million lines
Done Processing 13 million lines
Done Processing 14 million lines
Done Processing 15 million lines
Done Processing 16 million lines
Done Processing 17 million lines
Done Processing 18 million lines
young <- prepare_data("GSE190424_RAW\\Young\\GSM5723631_Young_HSC_filtered_peak_bc_matrix.h5",
                     "GSE190424_RAW\\Young\\GSM5723631_Young_HSC_singlecell.csv.gz",
                     "GSE190424_RAW\\Young\\GSM5723631_Young_HSC_fragments.tsv.gz"
                     )
Checking for 5028 cell barcodes
Found 5028 cell barcodes

Done Processing 1 million lines
Done Processing 2 million lines
Done Processing 3 million lines
Done Processing 4 million lines
Done Processing 5 million lines
Done Processing 6 million lines
Done Processing 7 million lines
Done Processing 8 million lines
Done Processing 9 million lines
                                                  
Done Processing 10 million lines
Done Processing 11 million lines
Done Processing 12 million lines
Done Processing 13 million lines
Done Processing 14 million lines
Done Processing 15 million lines
Done Processing 16 million lines
Done Processing 17 million lines
Done Processing 18 million lines
Done Processing 19 million lines
                                                  
Done Processing 20 million lines
Done Processing 21 million lines
Done Processing 22 million lines
Done Processing 23 million lines
Done Processing 24 million lines
Done Processing 25 million lines
# Add new column to differentiate between sample aged and young
young$sample <- "young"
aged$sample <- "aged"
aged[[]]
young[[]]
combined_data <- merge(young, aged)

  |                                                                                     
  |                                                                               |   0%
  |                                                                                     
  |                                                                               |   1%
  |                                                                                     
  |=                                                                              |   1%
  |                                                                                     
  |=                                                                              |   2%
  |                                                                                     
  |==                                                                             |   2%
  |                                                                                     
  |==                                                                             |   3%
  |                                                                                     
  |===                                                                            |   3%
  |                                                                                     
  |===                                                                            |   4%
  |                                                                                     
  |====                                                                           |   4%
  |                                                                                     
  |====                                                                           |   5%
  |                                                                                     
  |====                                                                           |   6%
  |                                                                                     
  |=====                                                                          |   6%
  |                                                                                     
  |=====                                                                          |   7%
  |                                                                                     
  |======                                                                         |   7%
  |                                                                                     
  |======                                                                         |   8%
  |                                                                                     
  |=======                                                                        |   8%
  |                                                                                     
  |=======                                                                        |   9%
  |                                                                                     
  |========                                                                       |   9%
  |                                                                                     
  |========                                                                       |  10%
  |                                                                                     
  |========                                                                       |  11%
  |                                                                                     
  |=========                                                                      |  11%
  |                                                                                     
  |=========                                                                      |  12%
  |                                                                                     
  |==========                                                                     |  12%
  |                                                                                     
  |==========                                                                     |  13%
  |                                                                                     
  |===========                                                                    |  13%
  |                                                                                     
  |===========                                                                    |  14%
  |                                                                                     
  |===========                                                                    |  15%
  |                                                                                     
  |============                                                                   |  15%
  |                                                                                     
  |============                                                                   |  16%
  |                                                                                     
  |=============                                                                  |  16%
  |                                                                                     
  |=============                                                                  |  17%
  |                                                                                     
  |==============                                                                 |  17%
  |                                                                                     
  |==============                                                                 |  18%
  |                                                                                     
  |===============                                                                |  18%
  |                                                                                     
  |===============                                                                |  19%
  |                                                                                     
  |===============                                                                |  20%
  |                                                                                     
  |================                                                               |  20%
  |                                                                                     
  |================                                                               |  21%
  |                                                                                     
  |=================                                                              |  21%
  |                                                                                     
  |=================                                                              |  22%
  |                                                                                     
  |==================                                                             |  22%
  |                                                                                     
  |==================                                                             |  23%
  |                                                                                     
  |===================                                                            |  23%
  |                                                                                     
  |===================                                                            |  24%
  |                                                                                     
  |===================                                                            |  25%
  |                                                                                     
  |====================                                                           |  25%
  |                                                                                     
  |====================                                                           |  26%
  |                                                                                     
  |=====================                                                          |  26%
  |                                                                                     
  |=====================                                                          |  27%
  |                                                                                     
  |======================                                                         |  27%
  |                                                                                     
  |======================                                                         |  28%
  |                                                                                     
  |=======================                                                        |  28%
  |                                                                                     
  |=======================                                                        |  29%
  |                                                                                     
  |=======================                                                        |  30%
  |                                                                                     
  |========================                                                       |  30%
  |                                                                                     
  |========================                                                       |  31%
  |                                                                                     
  |=========================                                                      |  31%
  |                                                                                     
  |=========================                                                      |  32%
  |                                                                                     
  |==========================                                                     |  32%
  |                                                                                     
  |==========================                                                     |  33%
  |                                                                                     
  |==========================                                                     |  34%
  |                                                                                     
  |===========================                                                    |  34%
  |                                                                                     
  |===========================                                                    |  35%
  |                                                                                     
  |============================                                                   |  35%
  |                                                                                     
  |============================                                                   |  36%
  |                                                                                     
  |=============================                                                  |  36%
  |                                                                                     
  |=============================                                                  |  37%
  |                                                                                     
  |==============================                                                 |  37%
  |                                                                                     
  |==============================                                                 |  38%
  |                                                                                     
  |==============================                                                 |  39%
  |                                                                                     
  |===============================                                                |  39%
  |                                                                                     
  |===============================                                                |  40%
  |                                                                                     
  |================================                                               |  40%
  |                                                                                     
  |================================                                               |  41%
  |                                                                                     
  |=================================                                              |  41%
  |                                                                                     
  |=================================                                              |  42%
  |                                                                                     
  |==================================                                             |  42%
  |                                                                                     
  |==================================                                             |  43%
  |                                                                                     
  |==================================                                             |  44%
  |                                                                                     
  |===================================                                            |  44%
  |                                                                                     
  |===================================                                            |  45%
  |                                                                                     
  |====================================                                           |  45%
  |                                                                                     
  |====================================                                           |  46%
  |                                                                                     
  |=====================================                                          |  46%
  |                                                                                     
  |=====================================                                          |  47%
  |                                                                                     
  |======================================                                         |  47%
  |                                                                                     
  |======================================                                         |  48%
  |                                                                                     
  |======================================                                         |  49%
  |                                                                                     
  |=======================================                                        |  49%
  |                                                                                     
  |=======================================                                        |  50%
  |                                                                                     
  |========================================                                       |  50%
  |                                                                                     
  |========================================                                       |  51%
  |                                                                                     
  |=========================================                                      |  51%
  |                                                                                     
  |=========================================                                      |  52%
  |                                                                                     
  |=========================================                                      |  53%
  |                                                                                     
  |==========================================                                     |  53%
  |                                                                                     
  |==========================================                                     |  54%
  |                                                                                     
  |===========================================                                    |  54%
  |                                                                                     
  |===========================================                                    |  55%
  |                                                                                     
  |============================================                                   |  55%
  |                                                                                     
  |============================================                                   |  56%
  |                                                                                     
  |=============================================                                  |  56%
  |                                                                                     
  |=============================================                                  |  57%
  |                                                                                     
  |=============================================                                  |  58%
  |                                                                                     
  |==============================================                                 |  58%
  |                                                                                     
  |==============================================                                 |  59%
  |                                                                                     
  |===============================================                                |  59%
  |                                                                                     
  |===============================================                                |  60%
  |                                                                                     
  |================================================                               |  60%
  |                                                                                     
  |================================================                               |  61%
  |                                                                                     
  |=================================================                              |  61%
  |                                                                                     
  |=================================================                              |  62%
  |                                                                                     
  |=================================================                              |  63%
  |                                                                                     
  |==================================================                             |  63%
  |                                                                                     
  |==================================================                             |  64%
  |                                                                                     
  |===================================================                            |  64%
  |                                                                                     
  |===================================================                            |  65%
  |                                                                                     
  |====================================================                           |  65%
  |                                                                                     
  |====================================================                           |  66%
  |                                                                                     
  |=====================================================                          |  66%
  |                                                                                     
  |=====================================================                          |  67%
  |                                                                                     
  |=====================================================                          |  68%
  |                                                                                     
  |======================================================                         |  68%
  |                                                                                     
  |======================================================                         |  69%
  |                                                                                     
  |=======================================================                        |  69%
  |                                                                                     
  |=======================================================                        |  70%
  |                                                                                     
  |========================================================                       |  70%
  |                                                                                     
  |========================================================                       |  71%
  |                                                                                     
  |========================================================                       |  72%
  |                                                                                     
  |=========================================================                      |  72%
  |                                                                                     
  |=========================================================                      |  73%
  |                                                                                     
  |==========================================================                     |  73%
  |                                                                                     
  |==========================================================                     |  74%
  |                                                                                     
  |===========================================================                    |  74%
  |                                                                                     
  |===========================================================                    |  75%
  |                                                                                     
  |============================================================                   |  75%
  |                                                                                     
  |============================================================                   |  76%
  |                                                                                     
  |============================================================                   |  77%
  |                                                                                     
  |=============================================================                  |  77%
  |                                                                                     
  |=============================================================                  |  78%
  |                                                                                     
  |==============================================================                 |  78%
  |                                                                                     
  |==============================================================                 |  79%
  |                                                                                     
  |===============================================================                |  79%
  |                                                                                     
  |===============================================================                |  80%
  |                                                                                     
  |================================================================               |  80%
  |                                                                                     
  |================================================================               |  81%
  |                                                                                     
  |================================================================               |  82%
  |                                                                                     
  |=================================================================              |  82%
  |                                                                                     
  |=================================================================              |  83%
  |                                                                                     
  |==================================================================             |  83%
  |                                                                                     
  |==================================================================             |  84%
  |                                                                                     
  |===================================================================            |  84%
  |                                                                                     
  |===================================================================            |  85%
  |                                                                                     
  |====================================================================           |  85%
  |                                                                                     
  |====================================================================           |  86%
  |                                                                                     
  |====================================================================           |  87%
  |                                                                                     
  |=====================================================================          |  87%
  |                                                                                     
  |=====================================================================          |  88%
  |                                                                                     
  |======================================================================         |  88%
  |                                                                                     
  |======================================================================         |  89%
  |                                                                                     
  |=======================================================================        |  89%
  |                                                                                     
  |=======================================================================        |  90%
  |                                                                                     
  |=======================================================================        |  91%
  |                                                                                     
  |========================================================================       |  91%
  |                                                                                     
  |========================================================================       |  92%
  |                                                                                     
  |=========================================================================      |  92%
  |                                                                                     
  |=========================================================================      |  93%
  |                                                                                     
  |==========================================================================     |  93%
  |                                                                                     
  |==========================================================================     |  94%
  |                                                                                     
  |===========================================================================    |  94%
  |                                                                                     
  |===========================================================================    |  95%
  |                                                                                     
  |===========================================================================    |  96%
  |                                                                                     
  |============================================================================   |  96%
  |                                                                                     
  |============================================================================   |  97%
  |                                                                                     
  |=============================================================================  |  97%
  |                                                                                     
  |=============================================================================  |  98%
  |                                                                                     
  |============================================================================== |  98%
  |                                                                                     
  |============================================================================== |  99%
  |                                                                                     
  |===============================================================================|  99%
  |                                                                                     
  |===============================================================================| 100%
  |                                                                                     
  |                                                                               |   0%
  |                                                                                     
  |                                                                               |   1%
  |                                                                                     
  |=                                                                              |   1%
  |                                                                                     
  |=                                                                              |   2%
  |                                                                                     
  |==                                                                             |   2%
  |                                                                                     
  |==                                                                             |   3%
  |                                                                                     
  |===                                                                            |   3%
  |                                                                                     
  |===                                                                            |   4%
  |                                                                                     
  |====                                                                           |   4%
  |                                                                                     
  |====                                                                           |   5%
  |                                                                                     
  |====                                                                           |   6%
  |                                                                                     
  |=====                                                                          |   6%
  |                                                                                     
  |=====                                                                          |   7%
  |                                                                                     
  |======                                                                         |   7%
  |                                                                                     
  |======                                                                         |   8%
  |                                                                                     
  |=======                                                                        |   8%
  |                                                                                     
  |=======                                                                        |   9%
  |                                                                                     
  |========                                                                       |   9%
  |                                                                                     
  |========                                                                       |  10%
  |                                                                                     
  |========                                                                       |  11%
  |                                                                                     
  |=========                                                                      |  11%
  |                                                                                     
  |=========                                                                      |  12%
  |                                                                                     
  |==========                                                                     |  12%
  |                                                                                     
  |==========                                                                     |  13%
  |                                                                                     
  |===========                                                                    |  13%
  |                                                                                     
  |===========                                                                    |  14%
  |                                                                                     
  |===========                                                                    |  15%
  |                                                                                     
  |============                                                                   |  15%
  |                                                                                     
  |============                                                                   |  16%
  |                                                                                     
  |=============                                                                  |  16%
  |                                                                                     
  |=============                                                                  |  17%
  |                                                                                     
  |==============                                                                 |  17%
  |                                                                                     
  |==============                                                                 |  18%
  |                                                                                     
  |===============                                                                |  18%
  |                                                                                     
  |===============                                                                |  19%
  |                                                                                     
  |===============                                                                |  20%
  |                                                                                     
  |================                                                               |  20%
  |                                                                                     
  |================                                                               |  21%
  |                                                                                     
  |=================                                                              |  21%
  |                                                                                     
  |=================                                                              |  22%
  |                                                                                     
  |==================                                                             |  22%
  |                                                                                     
  |==================                                                             |  23%
  |                                                                                     
  |===================                                                            |  23%
  |                                                                                     
  |===================                                                            |  24%
  |                                                                                     
  |===================                                                            |  25%
  |                                                                                     
  |====================                                                           |  25%
  |                                                                                     
  |====================                                                           |  26%
  |                                                                                     
  |=====================                                                          |  26%
  |                                                                                     
  |=====================                                                          |  27%
  |                                                                                     
  |======================                                                         |  27%
  |                                                                                     
  |======================                                                         |  28%
  |                                                                                     
  |=======================                                                        |  28%
  |                                                                                     
  |=======================                                                        |  29%
  |                                                                                     
  |=======================                                                        |  30%
  |                                                                                     
  |========================                                                       |  30%
  |                                                                                     
  |========================                                                       |  31%
  |                                                                                     
  |=========================                                                      |  31%
  |                                                                                     
  |=========================                                                      |  32%
  |                                                                                     
  |==========================                                                     |  32%
  |                                                                                     
  |==========================                                                     |  33%
  |                                                                                     
  |==========================                                                     |  34%
  |                                                                                     
  |===========================                                                    |  34%
  |                                                                                     
  |===========================                                                    |  35%
  |                                                                                     
  |============================                                                   |  35%
  |                                                                                     
  |============================                                                   |  36%
  |                                                                                     
  |=============================                                                  |  36%
  |                                                                                     
  |=============================                                                  |  37%
  |                                                                                     
  |==============================                                                 |  37%
  |                                                                                     
  |==============================                                                 |  38%
  |                                                                                     
  |==============================                                                 |  39%
  |                                                                                     
  |===============================                                                |  39%
  |                                                                                     
  |===============================                                                |  40%
  |                                                                                     
  |================================                                               |  40%
  |                                                                                     
  |================================                                               |  41%
  |                                                                                     
  |=================================                                              |  41%
  |                                                                                     
  |=================================                                              |  42%
  |                                                                                     
  |==================================                                             |  42%
  |                                                                                     
  |==================================                                             |  43%
  |                                                                                     
  |==================================                                             |  44%
  |                                                                                     
  |===================================                                            |  44%
  |                                                                                     
  |===================================                                            |  45%
  |                                                                                     
  |====================================                                           |  45%
  |                                                                                     
  |====================================                                           |  46%
  |                                                                                     
  |=====================================                                          |  46%
  |                                                                                     
  |=====================================                                          |  47%
  |                                                                                     
  |======================================                                         |  47%
  |                                                                                     
  |======================================                                         |  48%
  |                                                                                     
  |======================================                                         |  49%
  |                                                                                     
  |=======================================                                        |  49%
  |                                                                                     
  |=======================================                                        |  50%
  |                                                                                     
  |========================================                                       |  50%
  |                                                                                     
  |========================================                                       |  51%
  |                                                                                     
  |=========================================                                      |  51%
  |                                                                                     
  |=========================================                                      |  52%
  |                                                                                     
  |=========================================                                      |  53%
  |                                                                                     
  |==========================================                                     |  53%
  |                                                                                     
  |==========================================                                     |  54%
  |                                                                                     
  |===========================================                                    |  54%
  |                                                                                     
  |===========================================                                    |  55%
  |                                                                                     
  |============================================                                   |  55%
  |                                                                                     
  |============================================                                   |  56%
  |                                                                                     
  |=============================================                                  |  56%
  |                                                                                     
  |=============================================                                  |  57%
  |                                                                                     
  |=============================================                                  |  58%
  |                                                                                     
  |==============================================                                 |  58%
  |                                                                                     
  |==============================================                                 |  59%
  |                                                                                     
  |===============================================                                |  59%
  |                                                                                     
  |===============================================                                |  60%
  |                                                                                     
  |================================================                               |  60%
  |                                                                                     
  |================================================                               |  61%
  |                                                                                     
  |=================================================                              |  61%
  |                                                                                     
  |=================================================                              |  62%
  |                                                                                     
  |=================================================                              |  63%
  |                                                                                     
  |==================================================                             |  63%
  |                                                                                     
  |==================================================                             |  64%
  |                                                                                     
  |===================================================                            |  64%
  |                                                                                     
  |===================================================                            |  65%
  |                                                                                     
  |====================================================                           |  65%
  |                                                                                     
  |====================================================                           |  66%
  |                                                                                     
  |=====================================================                          |  66%
  |                                                                                     
  |=====================================================                          |  67%
  |                                                                                     
  |=====================================================                          |  68%
  |                                                                                     
  |======================================================                         |  68%
  |                                                                                     
  |======================================================                         |  69%
  |                                                                                     
  |=======================================================                        |  69%
  |                                                                                     
  |=======================================================                        |  70%
  |                                                                                     
  |========================================================                       |  70%
  |                                                                                     
  |========================================================                       |  71%
  |                                                                                     
  |========================================================                       |  72%
  |                                                                                     
  |=========================================================                      |  72%
  |                                                                                     
  |=========================================================                      |  73%
  |                                                                                     
  |==========================================================                     |  73%
  |                                                                                     
  |==========================================================                     |  74%
  |                                                                                     
  |===========================================================                    |  74%
  |                                                                                     
  |===========================================================                    |  75%
  |                                                                                     
  |============================================================                   |  75%
  |                                                                                     
  |============================================================                   |  76%
  |                                                                                     
  |============================================================                   |  77%
  |                                                                                     
  |=============================================================                  |  77%
  |                                                                                     
  |=============================================================                  |  78%
  |                                                                                     
  |==============================================================                 |  78%
  |                                                                                     
  |==============================================================                 |  79%
  |                                                                                     
  |===============================================================                |  79%
  |                                                                                     
  |===============================================================                |  80%
  |                                                                                     
  |================================================================               |  80%
  |                                                                                     
  |================================================================               |  81%
  |                                                                                     
  |================================================================               |  82%
  |                                                                                     
  |=================================================================              |  82%
  |                                                                                     
  |=================================================================              |  83%
  |                                                                                     
  |==================================================================             |  83%
  |                                                                                     
  |==================================================================             |  84%
  |                                                                                     
  |===================================================================            |  84%
  |                                                                                     
  |===================================================================            |  85%
  |                                                                                     
  |====================================================================           |  85%
  |                                                                                     
  |====================================================================           |  86%
  |                                                                                     
  |====================================================================           |  87%
  |                                                                                     
  |=====================================================================          |  87%
  |                                                                                     
  |=====================================================================          |  88%
  |                                                                                     
  |======================================================================         |  88%
  |                                                                                     
  |======================================================================         |  89%
  |                                                                                     
  |=======================================================================        |  89%
  |                                                                                     
  |=======================================================================        |  90%
  |                                                                                     
  |=======================================================================        |  91%
  |                                                                                     
  |========================================================================       |  91%
  |                                                                                     
  |========================================================================       |  92%
  |                                                                                     
  |=========================================================================      |  92%
  |                                                                                     
  |=========================================================================      |  93%
  |                                                                                     
  |==========================================================================     |  93%
  |                                                                                     
  |==========================================================================     |  94%
  |                                                                                     
  |===========================================================================    |  94%
  |                                                                                     
  |===========================================================================    |  95%
  |                                                                                     
  |===========================================================================    |  96%
  |                                                                                     
  |============================================================================   |  96%
  |                                                                                     
  |============================================================================   |  97%
  |                                                                                     
  |=============================================================================  |  97%
  |                                                                                     
  |=============================================================================  |  98%
  |                                                                                     
  |============================================================================== |  98%
  |                                                                                     
  |============================================================================== |  99%
  |                                                                                     
  |===============================================================================|  99%
  |                                                                                     
  |===============================================================================| 100%
  |                                                                                     
  |                                                                               |   0%
  |                                                                                     
  |                                                                               |   1%
  |                                                                                     
  |=                                                                              |   1%
  |                                                                                     
  |=                                                                              |   2%
  |                                                                                     
  |==                                                                             |   2%
  |                                                                                     
  |==                                                                             |   3%
  |                                                                                     
  |===                                                                            |   3%
  |                                                                                     
  |===                                                                            |   4%
  |                                                                                     
  |====                                                                           |   4%
  |                                                                                     
  |====                                                                           |   5%
  |                                                                                     
  |====                                                                           |   6%
  |                                                                                     
  |=====                                                                          |   6%
  |                                                                                     
  |=====                                                                          |   7%
  |                                                                                     
  |======                                                                         |   7%
  |                                                                                     
  |======                                                                         |   8%
  |                                                                                     
  |=======                                                                        |   8%
  |                                                                                     
  |=======                                                                        |   9%
  |                                                                                     
  |========                                                                       |   9%
  |                                                                                     
  |========                                                                       |  10%
  |                                                                                     
  |========                                                                       |  11%
  |                                                                                     
  |=========                                                                      |  11%
  |                                                                                     
  |=========                                                                      |  12%
  |                                                                                     
  |==========                                                                     |  12%
  |                                                                                     
  |==========                                                                     |  13%
  |                                                                                     
  |===========                                                                    |  13%
  |                                                                                     
  |===========                                                                    |  14%
  |                                                                                     
  |===========                                                                    |  15%
  |                                                                                     
  |============                                                                   |  15%
  |                                                                                     
  |============                                                                   |  16%
  |                                                                                     
  |=============                                                                  |  16%
  |                                                                                     
  |=============                                                                  |  17%
  |                                                                                     
  |==============                                                                 |  17%
  |                                                                                     
  |==============                                                                 |  18%
  |                                                                                     
  |===============                                                                |  18%
  |                                                                                     
  |===============                                                                |  19%
  |                                                                                     
  |===============                                                                |  20%
  |                                                                                     
  |================                                                               |  20%
  |                                                                                     
  |================                                                               |  21%
  |                                                                                     
  |=================                                                              |  21%
  |                                                                                     
  |=================                                                              |  22%
  |                                                                                     
  |==================                                                             |  22%
  |                                                                                     
  |==================                                                             |  23%
  |                                                                                     
  |===================                                                            |  23%
  |                                                                                     
  |===================                                                            |  24%
  |                                                                                     
  |===================                                                            |  25%
  |                                                                                     
  |====================                                                           |  25%
  |                                                                                     
  |====================                                                           |  26%
  |                                                                                     
  |=====================                                                          |  26%
  |                                                                                     
  |=====================                                                          |  27%
  |                                                                                     
  |======================                                                         |  27%
  |                                                                                     
  |======================                                                         |  28%
  |                                                                                     
  |=======================                                                        |  28%
  |                                                                                     
  |=======================                                                        |  29%
  |                                                                                     
  |=======================                                                        |  30%
  |                                                                                     
  |========================                                                       |  30%
  |                                                                                     
  |========================                                                       |  31%
  |                                                                                     
  |=========================                                                      |  31%
  |                                                                                     
  |=========================                                                      |  32%
  |                                                                                     
  |==========================                                                     |  32%
  |                                                                                     
  |==========================                                                     |  33%
  |                                                                                     
  |==========================                                                     |  34%
  |                                                                                     
  |===========================                                                    |  34%
  |                                                                                     
  |===========================                                                    |  35%
  |                                                                                     
  |============================                                                   |  35%
  |                                                                                     
  |============================                                                   |  36%
  |                                                                                     
  |=============================                                                  |  36%
  |                                                                                     
  |=============================                                                  |  37%
  |                                                                                     
  |==============================                                                 |  37%
  |                                                                                     
  |==============================                                                 |  38%
  |                                                                                     
  |==============================                                                 |  39%
  |                                                                                     
  |===============================                                                |  39%
  |                                                                                     
  |===============================                                                |  40%
  |                                                                                     
  |================================                                               |  40%
  |                                                                                     
  |================================                                               |  41%
  |                                                                                     
  |=================================                                              |  41%
  |                                                                                     
  |=================================                                              |  42%
  |                                                                                     
  |==================================                                             |  42%
  |                                                                                     
  |==================================                                             |  43%
  |                                                                                     
  |==================================                                             |  44%
  |                                                                                     
  |===================================                                            |  44%
  |                                                                                     
  |===================================                                            |  45%
  |                                                                                     
  |====================================                                           |  45%
  |                                                                                     
  |====================================                                           |  46%
  |                                                                                     
  |=====================================                                          |  46%
  |                                                                                     
  |=====================================                                          |  47%
  |                                                                                     
  |======================================                                         |  47%
  |                                                                                     
  |======================================                                         |  48%
  |                                                                                     
  |======================================                                         |  49%
  |                                                                                     
  |=======================================                                        |  49%
  |                                                                                     
  |=======================================                                        |  50%
  |                                                                                     
  |========================================                                       |  50%
  |                                                                                     
  |========================================                                       |  51%
  |                                                                                     
  |=========================================                                      |  51%
  |                                                                                     
  |=========================================                                      |  52%
  |                                                                                     
  |=========================================                                      |  53%
  |                                                                                     
  |==========================================                                     |  53%
  |                                                                                     
  |==========================================                                     |  54%
  |                                                                                     
  |===========================================                                    |  54%
  |                                                                                     
  |===========================================                                    |  55%
  |                                                                                     
  |============================================                                   |  55%
  |                                                                                     
  |============================================                                   |  56%
  |                                                                                     
  |=============================================                                  |  56%
  |                                                                                     
  |=============================================                                  |  57%
  |                                                                                     
  |=============================================                                  |  58%
  |                                                                                     
  |==============================================                                 |  58%
  |                                                                                     
  |==============================================                                 |  59%
  |                                                                                     
  |===============================================                                |  59%
  |                                                                                     
  |===============================================                                |  60%
  |                                                                                     
  |================================================                               |  60%
  |                                                                                     
  |================================================                               |  61%
  |                                                                                     
  |=================================================                              |  61%
  |                                                                                     
  |=================================================                              |  62%
  |                                                                                     
  |=================================================                              |  63%
  |                                                                                     
  |==================================================                             |  63%
  |                                                                                     
  |==================================================                             |  64%
  |                                                                                     
  |===================================================                            |  64%
  |                                                                                     
  |===================================================                            |  65%
  |                                                                                     
  |====================================================                           |  65%
  |                                                                                     
  |====================================================                           |  66%
  |                                                                                     
  |=====================================================                          |  66%
  |                                                                                     
  |=====================================================                          |  67%
  |                                                                                     
  |=====================================================                          |  68%
  |                                                                                     
  |======================================================                         |  68%
  |                                                                                     
  |======================================================                         |  69%
  |                                                                                     
  |=======================================================                        |  69%
  |                                                                                     
  |=======================================================                        |  70%
  |                                                                                     
  |========================================================                       |  70%
  |                                                                                     
  |========================================================                       |  71%
  |                                                                                     
  |========================================================                       |  72%
  |                                                                                     
  |=========================================================                      |  72%
  |                                                                                     
  |=========================================================                      |  73%
  |                                                                                     
  |==========================================================                     |  73%
  |                                                                                     
  |==========================================================                     |  74%
  |                                                                                     
  |===========================================================                    |  74%
  |                                                                                     
  |===========================================================                    |  75%
  |                                                                                     
  |============================================================                   |  75%
  |                                                                                     
  |============================================================                   |  76%
  |                                                                                     
  |============================================================                   |  77%
  |                                                                                     
  |=============================================================                  |  77%
  |                                                                                     
  |=============================================================                  |  78%
  |                                                                                     
  |==============================================================                 |  78%
  |                                                                                     
  |==============================================================                 |  79%
  |                                                                                     
  |===============================================================                |  79%
  |                                                                                     
  |===============================================================                |  80%
  |                                                                                     
  |================================================================               |  80%
  |                                                                                     
  |================================================================               |  81%
  |                                                                                     
  |================================================================               |  82%
  |                                                                                     
  |=================================================================              |  82%
  |                                                                                     
  |=================================================================              |  83%
  |                                                                                     
  |==================================================================             |  83%
  |                                                                                     
  |==================================================================             |  84%
  |                                                                                     
  |===================================================================            |  84%
  |                                                                                     
  |===================================================================            |  85%
  |                                                                                     
  |====================================================================           |  85%
  |                                                                                     
  |====================================================================           |  86%
  |                                                                                     
  |====================================================================           |  87%
  |                                                                                     
  |=====================================================================          |  87%
  |                                                                                     
  |=====================================================================          |  88%
  |                                                                                     
  |======================================================================         |  88%
  |                                                                                     
  |======================================================================         |  89%
  |                                                                                     
  |=======================================================================        |  89%
  |                                                                                     
  |=======================================================================        |  90%
  |                                                                                     
  |=======================================================================        |  91%
  |                                                                                     
  |========================================================================       |  91%
  |                                                                                     
  |========================================================================       |  92%
  |                                                                                     
  |=========================================================================      |  92%
  |                                                                                     
  |=========================================================================      |  93%
  |                                                                                     
  |==========================================================================     |  93%
  |                                                                                     
  |==========================================================================     |  94%
  |                                                                                     
  |===========================================================================    |  94%
  |                                                                                     
  |===========================================================================    |  95%
  |                                                                                     
  |===========================================================================    |  96%
  |                                                                                     
  |============================================================================   |  96%
  |                                                                                     
  |============================================================================   |  97%
  |                                                                                     
  |=============================================================================  |  97%
  |                                                                                     
  |=============================================================================  |  98%
  |                                                                                     
  |============================================================================== |  98%
  |                                                                                     
  |============================================================================== |  99%
  |                                                                                     
  |===============================================================================|  99%
  |                                                                                     
  |===============================================================================| 100%
  |                                                                                     
  |                                                                               |   0%
  |                                                                                     
  |                                                                               |   1%
  |                                                                                     
  |=                                                                              |   1%
  |                                                                                     
  |=                                                                              |   2%
  |                                                                                     
  |==                                                                             |   2%
  |                                                                                     
  |==                                                                             |   3%
  |                                                                                     
  |===                                                                            |   3%
  |                                                                                     
  |===                                                                            |   4%
  |                                                                                     
  |====                                                                           |   4%
  |                                                                                     
  |====                                                                           |   5%
  |                                                                                     
  |====                                                                           |   6%
  |                                                                                     
  |=====                                                                          |   6%
  |                                                                                     
  |=====                                                                          |   7%
  |                                                                                     
  |======                                                                         |   7%
  |                                                                                     
  |======                                                                         |   8%
  |                                                                                     
  |=======                                                                        |   8%
  |                                                                                     
  |=======                                                                        |   9%
  |                                                                                     
  |========                                                                       |   9%
  |                                                                                     
  |========                                                                       |  10%
  |                                                                                     
  |========                                                                       |  11%
  |                                                                                     
  |=========                                                                      |  11%
  |                                                                                     
  |=========                                                                      |  12%
  |                                                                                     
  |==========                                                                     |  12%
  |                                                                                     
  |==========                                                                     |  13%
  |                                                                                     
  |===========                                                                    |  13%
  |                                                                                     
  |===========                                                                    |  14%
  |                                                                                     
  |===========                                                                    |  15%
  |                                                                                     
  |============                                                                   |  15%
  |                                                                                     
  |============                                                                   |  16%
  |                                                                                     
  |=============                                                                  |  16%
  |                                                                                     
  |=============                                                                  |  17%
  |                                                                                     
  |==============                                                                 |  17%
  |                                                                                     
  |==============                                                                 |  18%
  |                                                                                     
  |===============                                                                |  18%
  |                                                                                     
  |===============                                                                |  19%
  |                                                                                     
  |===============                                                                |  20%
  |                                                                                     
  |================                                                               |  20%
  |                                                                                     
  |================                                                               |  21%
  |                                                                                     
  |=================                                                              |  21%
  |                                                                                     
  |=================                                                              |  22%
  |                                                                                     
  |==================                                                             |  22%
  |                                                                                     
  |==================                                                             |  23%
  |                                                                                     
  |===================                                                            |  23%
  |                                                                                     
  |===================                                                            |  24%
  |                                                                                     
  |===================                                                            |  25%
  |                                                                                     
  |====================                                                           |  25%
  |                                                                                     
  |====================                                                           |  26%
  |                                                                                     
  |=====================                                                          |  26%
  |                                                                                     
  |=====================                                                          |  27%
  |                                                                                     
  |======================                                                         |  27%
  |                                                                                     
  |======================                                                         |  28%
  |                                                                                     
  |=======================                                                        |  28%
  |                                                                                     
  |=======================                                                        |  29%
  |                                                                                     
  |=======================                                                        |  30%
  |                                                                                     
  |========================                                                       |  30%
  |                                                                                     
  |========================                                                       |  31%
  |                                                                                     
  |=========================                                                      |  31%
  |                                                                                     
  |=========================                                                      |  32%
  |                                                                                     
  |==========================                                                     |  32%
  |                                                                                     
  |==========================                                                     |  33%
  |                                                                                     
  |==========================                                                     |  34%
  |                                                                                     
  |===========================                                                    |  34%
  |                                                                                     
  |===========================                                                    |  35%
  |                                                                                     
  |============================                                                   |  35%
  |                                                                                     
  |============================                                                   |  36%
  |                                                                                     
  |=============================                                                  |  36%
  |                                                                                     
  |=============================                                                  |  37%
  |                                                                                     
  |==============================                                                 |  37%
  |                                                                                     
  |==============================                                                 |  38%
  |                                                                                     
  |==============================                                                 |  39%
  |                                                                                     
  |===============================                                                |  39%
  |                                                                                     
  |===============================                                                |  40%
  |                                                                                     
  |================================                                               |  40%
  |                                                                                     
  |================================                                               |  41%
  |                                                                                     
  |=================================                                              |  41%
  |                                                                                     
  |=================================                                              |  42%
  |                                                                                     
  |==================================                                             |  42%
  |                                                                                     
  |==================================                                             |  43%
  |                                                                                     
  |==================================                                             |  44%
  |                                                                                     
  |===================================                                            |  44%
  |                                                                                     
  |===================================                                            |  45%
  |                                                                                     
  |====================================                                           |  45%
  |                                                                                     
  |====================================                                           |  46%
  |                                                                                     
  |=====================================                                          |  46%
  |                                                                                     
  |=====================================                                          |  47%
  |                                                                                     
  |======================================                                         |  47%
  |                                                                                     
  |======================================                                         |  48%
  |                                                                                     
  |======================================                                         |  49%
  |                                                                                     
  |=======================================                                        |  49%
  |                                                                                     
  |=======================================                                        |  50%
  |                                                                                     
  |========================================                                       |  50%
  |                                                                                     
  |========================================                                       |  51%
  |                                                                                     
  |=========================================                                      |  51%
  |                                                                                     
  |=========================================                                      |  52%
  |                                                                                     
  |=========================================                                      |  53%
  |                                                                                     
  |==========================================                                     |  53%
  |                                                                                     
  |==========================================                                     |  54%
  |                                                                                     
  |===========================================                                    |  54%
  |                                                                                     
  |===========================================                                    |  55%
  |                                                                                     
  |============================================                                   |  55%
  |                                                                                     
  |============================================                                   |  56%
  |                                                                                     
  |=============================================                                  |  56%
  |                                                                                     
  |=============================================                                  |  57%
  |                                                                                     
  |=============================================                                  |  58%
  |                                                                                     
  |==============================================                                 |  58%
  |                                                                                     
  |==============================================                                 |  59%
  |                                                                                     
  |===============================================                                |  59%
  |                                                                                     
  |===============================================                                |  60%
  |                                                                                     
  |================================================                               |  60%
  |                                                                                     
  |================================================                               |  61%
  |                                                                                     
  |=================================================                              |  61%
  |                                                                                     
  |=================================================                              |  62%
  |                                                                                     
  |=================================================                              |  63%
  |                                                                                     
  |==================================================                             |  63%
  |                                                                                     
  |==================================================                             |  64%
  |                                                                                     
  |===================================================                            |  64%
  |                                                                                     
  |===================================================                            |  65%
  |                                                                                     
  |====================================================                           |  65%
  |                                                                                     
  |====================================================                           |  66%
  |                                                                                     
  |=====================================================                          |  66%
  |                                                                                     
  |=====================================================                          |  67%
  |                                                                                     
  |=====================================================                          |  68%
  |                                                                                     
  |======================================================                         |  68%
  |                                                                                     
  |======================================================                         |  69%
  |                                                                                     
  |=======================================================                        |  69%
  |                                                                                     
  |=======================================================                        |  70%
  |                                                                                     
  |========================================================                       |  70%
  |                                                                                     
  |========================================================                       |  71%
  |                                                                                     
  |========================================================                       |  72%
  |                                                                                     
  |=========================================================                      |  72%
  |                                                                                     
  |=========================================================                      |  73%
  |                                                                                     
  |==========================================================                     |  73%
  |                                                                                     
  |==========================================================                     |  74%
  |                                                                                     
  |===========================================================                    |  74%
  |                                                                                     
  |===========================================================                    |  75%
  |                                                                                     
  |============================================================                   |  75%
  |                                                                                     
  |============================================================                   |  76%
  |                                                                                     
  |============================================================                   |  77%
  |                                                                                     
  |=============================================================                  |  77%
  |                                                                                     
  |=============================================================                  |  78%
  |                                                                                     
  |==============================================================                 |  78%
  |                                                                                     
  |==============================================================                 |  79%
  |                                                                                     
  |===============================================================                |  79%
  |                                                                                     
  |===============================================================                |  80%
  |                                                                                     
  |================================================================               |  80%
  |                                                                                     
  |================================================================               |  81%
  |                                                                                     
  |================================================================               |  82%
  |                                                                                     
  |=================================================================              |  82%
  |                                                                                     
  |=================================================================              |  83%
  |                                                                                     
  |==================================================================             |  83%
  |                                                                                     
  |==================================================================             |  84%
  |                                                                                     
  |===================================================================            |  84%
  |                                                                                     
  |===================================================================            |  85%
  |                                                                                     
  |====================================================================           |  85%
  |                                                                                     
  |====================================================================           |  86%
  |                                                                                     
  |====================================================================           |  87%
  |                                                                                     
  |=====================================================================          |  87%
  |                                                                                     
  |=====================================================================          |  88%
  |                                                                                     
  |======================================================================         |  88%
  |                                                                                     
  |======================================================================         |  89%
  |                                                                                     
  |=======================================================================        |  89%
  |                                                                                     
  |=======================================================================        |  90%
  |                                                                                     
  |=======================================================================        |  91%
  |                                                                                     
  |========================================================================       |  91%
  |                                                                                     
  |========================================================================       |  92%
  |                                                                                     
  |=========================================================================      |  92%
  |                                                                                     
  |=========================================================================      |  93%
  |                                                                                     
  |==========================================================================     |  93%
  |                                                                                     
  |==========================================================================     |  94%
  |                                                                                     
  |===========================================================================    |  94%
  |                                                                                     
  |===========================================================================    |  95%
  |                                                                                     
  |===========================================================================    |  96%
  |                                                                                     
  |============================================================================   |  96%
  |                                                                                     
  |============================================================================   |  97%
  |                                                                                     
  |=============================================================================  |  97%
  |                                                                                     
  |=============================================================================  |  98%
  |                                                                                     
  |============================================================================== |  98%
  |                                                                                     
  |============================================================================== |  99%
  |                                                                                     
  |===============================================================================|  99%
  |                                                                                     
  |===============================================================================| 100%
combined_data <- RunTFIDF(combined_data)
combined_data <- FindTopFeatures(combined_data, min.cutoff = 'q0')
combined_data <- RunSVD(object = combined_data)
DepthCor(combined_data)

combined_data <- RunUMAP(object = combined_data, reduction = 'lsi', dims = 2:30)
Using method 'umap'
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
combined_data <- FindNeighbors(object = combined_data, reduction = 'lsi', dims = 2:30)
combined_data <- FindClusters(object = combined_data, verbose = FALSE, algorithm = 3, resolution = .4)
DimPlot(object = combined_data, label = TRUE) + NoLegend()

DimPlot(object = combined_data, label = TRUE, group.by = "sample") + NoLegend()

Data Analysis

# 1. Create a gene activity matrix
# Gene activity based on chromatin accessibility

gene.activities <- GeneActivity(combined_data)

Processed 24766 groups out of 26139. 95% done. Time elapsed: 3s. ETA: 0s.
Processed 26139 groups out of 26139. 100% done. Time elapsed: 3s. ETA: 0s.

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~03m 26s      
  |++++++++++                                        | 18% ~02m 45s      
  |++++++++++++++                                    | 27% ~02m 31s      
  |+++++++++++++++++++                               | 36% ~02m 20s      
  |+++++++++++++++++++++++                           | 45% ~01m 51s      
  |++++++++++++++++++++++++++++                      | 55% ~01m 26s      
  |++++++++++++++++++++++++++++++++                  | 64% ~01m 14s      
  |+++++++++++++++++++++++++++++++++++++             | 73% ~56s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~36s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~18s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=03m 19s

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~02m 41s      
  |++++++++++                                        | 18% ~01m 57s      
  |++++++++++++++                                    | 27% ~01m 43s      
  |+++++++++++++++++++                               | 36% ~01m 19s      
  |+++++++++++++++++++++++                           | 45% ~01m 16s      
  |++++++++++++++++++++++++++++                      | 55% ~01m 09s      
  |++++++++++++++++++++++++++++++++                  | 64% ~59s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~45s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~31s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~16s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=03m 01s
# gene.activities
# add the gene activity matrix to the Seurat object as a new assay
combined_data[['RNA']] <- CreateAssayObject(counts = gene.activities)
# Normalize
combined_data <- NormalizeData(
  object = combined_data,
  assay = 'RNA',
  normalization.method = 'LogNormalize',
  scale.factor = median(combined_data$nCount_RNA)
)
Performing log-normalization
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
combined_data[["RNA"]]
Assay data with 21821 features for 7792 cells
First 10 features:
 Hnf4g, Zfhx4, Pex2, UBC, 1700008P02Rik, Pkia, Zc2hc1a, Il7, 1700010I02Rik,
Stmn2 
combined_data[["peaks"]]
ChromatinAssay data with 177359 features for 7792 cells
Variable features: 177359 
Genome: mm10 
Annotation present: TRUE 
Motifs present: FALSE 
Fragment files: 2 
combined_data
An object of class Seurat 
199180 features across 7792 samples within 2 assays 
Active assay: peaks (177359 features, 177359 variable features)
 2 layers present: counts, data
 1 other assay present: RNA
 2 dimensional reductions calculated: lsi, umap
DefaultAssay(combined_data)
[1] "peaks"
# Set RNA as default assay 
DefaultAssay(combined_data) <- 'RNA'
# Plit expression of genes in each cluster

FeaturePlot(
  object = combined_data,
  features = c("Hnf4g", "Zfhx4", "Pex2", "Pkia"),
  max.cutoff = 'q95',
)

# Set default assay back to peaks
DefaultAssay(combined_data) <- 'peaks'

Find differentially accessible peaks between clusters

# peak_region_fragments: total number of reads overlapping any peak per cell
# reflects sequencing depth
# latent.vars = 'peak_region_fragments' adjusts for this
# to remove bias from cells with higher/lower depth

da_peaks <- FindMarkers(
  object = combined_data,
  ident.1 = rownames(combined_data[[]][combined_data$sample == "aged",]),
  ident.2 = rownames(combined_data[[]][combined_data$sample == "young",]),
  min.pct = 0.05,
  test.use = 'LR',
  latent.vars = 'peak_region_fragments'
)

  |                                                  | 0 % ~calculating  
  |+                                                 | 1 % ~01h 25m 04s  
  |+                                                 | 2 % ~01h 06m 54s  
  |++                                                | 3 % ~01h 03m 04s  
  |++                                                | 4 % ~59m 17s      
  |+++                                               | 5 % ~58m 02s      
  |+++                                               | 6 % ~56m 07s      
  |++++                                              | 7 % ~55m 25s      
  |++++                                              | 8 % ~54m 12s      
  |+++++                                             | 9 % ~53m 36s      
  |+++++                                             | 10% ~58m 05s      
  |++++++                                            | 11% ~01h 08m 07s  
  |++++++                                            | 12% ~01h 14m 39s  
  |+++++++                                           | 13% ~01h 20m 33s  
  |+++++++                                           | 14% ~01h 33m 41s  
  |++++++++                                          | 15% ~01h 48m 55s  
  |++++++++                                          | 16% ~02h 03m 07s  
  |+++++++++                                         | 17% ~02h 03m 45s  
  |+++++++++                                         | 18% ~02h 12m 26s  
  |++++++++++                                        | 19% ~02h 19m 14s  
  |++++++++++                                        | 20% ~02h 14m 50s  
  |+++++++++++                                       | 21% ~02h 10m 47s  
  |+++++++++++                                       | 22% ~02h 07m 55s  
  |++++++++++++                                      | 23% ~02h 11m 36s  
  |++++++++++++                                      | 24% ~02h 14m 45s  
  |+++++++++++++                                     | 25% ~02h 17m 10s  
  |+++++++++++++                                     | 26% ~02h 18m 22s  
  |++++++++++++++                                    | 27% ~02h 20m 02s  
  |++++++++++++++                                    | 28% ~02h 21m 39s  
  |+++++++++++++++                                   | 29% ~02h 20m 50s  
  |+++++++++++++++                                   | 30% ~02h 18m 44s  
  |++++++++++++++++                                  | 31% ~02h 13m 56s  
  |++++++++++++++++                                  | 32% ~02h 09m 07s  
  |+++++++++++++++++                                 | 33% ~02h 04m 42s  
  |+++++++++++++++++                                 | 34% ~02h 03m 43s  
  |++++++++++++++++++                                | 35% ~02h 02m 43s  
  |++++++++++++++++++                                | 36% ~02h 00m 05s  
  |+++++++++++++++++++                               | 37% ~01h 56m 01s  
  |+++++++++++++++++++                               | 38% ~01h 52m 08s  
  |++++++++++++++++++++                              | 39% ~01h 48m 24s  
  |++++++++++++++++++++                              | 40% ~01h 44m 50s  
  |+++++++++++++++++++++                             | 41% ~01h 41m 25s  
  |+++++++++++++++++++++                             | 42% ~01h 38m 17s  
  |++++++++++++++++++++++                            | 43% ~01h 35m 09s  
  |++++++++++++++++++++++                            | 44% ~01h 32m 10s  
  |+++++++++++++++++++++++                           | 45% ~01h 29m 12s  
  |+++++++++++++++++++++++                           | 46% ~01h 26m 20s  
  |++++++++++++++++++++++++                          | 47% ~01h 23m 35s  
  |++++++++++++++++++++++++                          | 48% ~01h 21m 01s  
  |+++++++++++++++++++++++++                         | 49% ~01h 18m 26s  
  |+++++++++++++++++++++++++                         | 50% ~01h 15m 56s  
  |++++++++++++++++++++++++++                        | 51% ~01h 13m 31s  
  |++++++++++++++++++++++++++                        | 52% ~01h 11m 10s  
  |+++++++++++++++++++++++++++                       | 53% ~01h 08m 53s  
  |+++++++++++++++++++++++++++                       | 54% ~01h 06m 45s  
  |++++++++++++++++++++++++++++                      | 55% ~01h 04m 36s  
  |++++++++++++++++++++++++++++                      | 56% ~01h 02m 30s  
  |+++++++++++++++++++++++++++++                     | 57% ~01h 00m 26s  
  |+++++++++++++++++++++++++++++                     | 58% ~58m 26s      
  |++++++++++++++++++++++++++++++                    | 59% ~56m 29s      
  |++++++++++++++++++++++++++++++                    | 60% ~54m 34s      
  |+++++++++++++++++++++++++++++++                   | 61% ~52m 46s      
  |+++++++++++++++++++++++++++++++                   | 62% ~50m 57s      
  |++++++++++++++++++++++++++++++++                  | 63% ~49m 11s      
  |++++++++++++++++++++++++++++++++                  | 64% ~47m 25s      
  |+++++++++++++++++++++++++++++++++                 | 65% ~45m 41s      
  |+++++++++++++++++++++++++++++++++                 | 66% ~43m 60s      
  |++++++++++++++++++++++++++++++++++                | 67% ~42m 24s      
  |++++++++++++++++++++++++++++++++++                | 68% ~40m 47s      
  |+++++++++++++++++++++++++++++++++++               | 69% ~39m 12s      
  |+++++++++++++++++++++++++++++++++++               | 70% ~37m 39s      
  |++++++++++++++++++++++++++++++++++++              | 71% ~36m 07s      
  |++++++++++++++++++++++++++++++++++++              | 72% ~34m 37s      
  |+++++++++++++++++++++++++++++++++++++             | 73% ~33m 09s      
  |+++++++++++++++++++++++++++++++++++++             | 74% ~31m 45s      
  |++++++++++++++++++++++++++++++++++++++            | 75% ~30m 19s      
  |++++++++++++++++++++++++++++++++++++++            | 76% ~28m 54s      
  |+++++++++++++++++++++++++++++++++++++++           | 77% ~27m 31s      
  |+++++++++++++++++++++++++++++++++++++++           | 78% ~26m 09s      
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~24m 48s      
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~23m 30s      
  |+++++++++++++++++++++++++++++++++++++++++         | 81% ~22m 11s      
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~20m 53s      
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~19m 37s      
  |++++++++++++++++++++++++++++++++++++++++++        | 84% ~18m 21s      
  |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~17m 06s      
  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~15m 52s      
  |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~14m 40s      
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~13m 28s      
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~12m 17s      
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~11m 06s      
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~09m 56s      
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~08m 47s      
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~07m 39s      
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~06m 32s      
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~05m 25s      
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~04m 19s      
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~03m 13s      
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~02m 08s      
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~01m 04s      
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=01h 45m 48s
head(da_peaks) # regions that are significant between young and aged samples
plot1 <- VlnPlot(
  object = combined_data,
  features = rownames(da_peaks)[1],             # the peak to plot
  pt.size = 0.1,                   # size of dots per cell
  group.by = "sample"              # groups to split cells by
)

plot2 <- FeaturePlot(
  object = combined_data,
  features = rownames(da_peaks)[1],
  pt.size = 0.1,
  max.cutoff = 'q95'
)
plot1 | plot2

# Find genes nearest to these significant regions
ClosestFeature(combined_data, regions = rownames(da_peaks))
NA
da_peaks$closest_gene <-ClosestFeature(combined_data, regions = rownames(da_peaks))$gene_name
da_peaks$distance <- ClosestFeature(combined_data, regions = rownames(da_peaks))$distance
head(da_peaks)
CoveragePlot(
  object = combined_data,
  region = rownames(da_peaks)[1],
  extend.upstream = 10000,
  extend.downstream = 5000,
  group.by = "sample"
)

CoveragePlot(
  object = combined_data,
  region = rownames(da_peaks)[2],
  extend.upstream = 10000,
  extend.downstream = 5000,
  group.by = "sample"
)

plot1 <- VlnPlot(
  object = combined_data,
  features = rownames(da_peaks)[1],            
  pt.size = 0.1,                   
  group.by = "sample"              
)

plot2 <- FeaturePlot(
  object = combined_data,
  features = rownames(da_peaks)[1],
  pt.size = 0.1,
  max.cutoff = 'q95'
)
plot1 | plot2

plot1 <- VlnPlot(
  object = combined_data,
  features = rownames(da_peaks)[2],            
  pt.size = 0.1,                   
  group.by = "sample"              
)

plot2 <- FeaturePlot(
  object = combined_data,
  features = rownames(da_peaks)[2],
  pt.size = 0.1,
  max.cutoff = 'q95'
)
plot1 | plot2

sessionInfo()
R version 4.4.3 (2025-02-28 ucrt)
Platform: x86_64-w64-mingw32/x64
Running under: Windows 11 x64 (build 26100)

Matrix products: default


locale:
[1] LC_COLLATE=English_India.utf8  LC_CTYPE=English_India.utf8   
[3] LC_MONETARY=English_India.utf8 LC_NUMERIC=C                  
[5] LC_TIME=English_India.utf8    

time zone: Europe/Berlin
tzcode source: internal

attached base packages:
[1] stats4    stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
 [1] future_1.67.0              EnsDb.Mmusculus.v79_2.99.0 ensembldb_2.30.0          
 [4] AnnotationFilter_1.30.0    GenomicFeatures_1.58.0     AnnotationDbi_1.68.0      
 [7] Biobase_2.66.0             GenomicRanges_1.58.0       GenomeInfoDb_1.42.3       
[10] IRanges_2.40.1             S4Vectors_0.44.0           BiocGenerics_0.52.0       
[13] BiocManager_1.30.26        patchwork_1.3.2            ggplot2_4.0.0             
[16] Signac_1.16.0              Seurat_5.3.0               SeuratObject_5.2.0        
[19] sp_2.2-0                   hdf5r_1.3.12              

loaded via a namespace (and not attached):
  [1] RcppAnnoy_0.0.22            splines_4.4.3               later_1.4.4                
  [4] BiocIO_1.16.0               bitops_1.0-9                tibble_3.3.0               
  [7] polyclip_1.10-7             rpart_4.1.24                XML_3.99-0.19              
 [10] fastDummies_1.7.5           lifecycle_1.0.4             globals_0.18.0             
 [13] lattice_0.22-6              MASS_7.3-64                 backports_1.5.0            
 [16] magrittr_2.0.4              sass_0.4.10                 Hmisc_5.2-4                
 [19] plotly_4.11.0               rmarkdown_2.30              jquerylib_0.1.4            
 [22] yaml_2.3.10                 httpuv_1.6.16               sctransform_0.4.2          
 [25] spam_2.11-1                 spatstat.sparse_3.1-0       reticulate_1.43.0          
 [28] cowplot_1.2.0               pbapply_1.7-4               DBI_1.2.3                  
 [31] RColorBrewer_1.1-3          abind_1.4-8                 zlibbioc_1.52.0            
 [34] Rtsne_0.17                  purrr_1.1.0                 biovizBase_1.54.0          
 [37] RCurl_1.98-1.17             nnet_7.3-20                 VariantAnnotation_1.52.0   
 [40] GenomeInfoDbData_1.2.13     ggrepel_0.9.6               irlba_2.3.5.1              
 [43] listenv_0.10.0              spatstat.utils_3.2-0        goftest_1.2-3              
 [46] RSpectra_0.16-2             spatstat.random_3.4-2       fitdistrplus_1.2-4         
 [49] parallelly_1.45.1           codetools_0.2-20            DelayedArray_0.32.0        
 [52] RcppRoll_0.3.1              tidyselect_1.2.1            UCSC.utils_1.2.0           
 [55] farver_2.1.2                base64enc_0.1-3             matrixStats_1.5.0          
 [58] spatstat.explore_3.5-3      GenomicAlignments_1.42.0    jsonlite_2.0.0             
 [61] Formula_1.2-5               progressr_0.17.0            ggridges_0.5.7             
 [64] survival_3.8-3              tools_4.4.3                 ica_1.0-3                  
 [67] Rcpp_1.1.0                  glue_1.8.0                  gridExtra_2.3              
 [70] SparseArray_1.6.2           xfun_0.53                   MatrixGenerics_1.18.1      
 [73] dplyr_1.1.4                 withr_3.0.2                 fastmap_1.2.0              
 [76] digest_0.6.37               R6_2.6.1                    mime_0.13                  
 [79] colorspace_2.1-2            scattermore_1.2             tensor_1.5.1               
 [82] dichromat_2.0-0.1           spatstat.data_3.1-9         RSQLite_2.4.3              
 [85] tidyr_1.3.1                 generics_0.1.4              data.table_1.17.8          
 [88] rtracklayer_1.66.0          httr_1.4.7                  htmlwidgets_1.6.4          
 [91] S4Arrays_1.6.0              uwot_0.2.3                  pkgconfig_2.0.3            
 [94] gtable_0.3.6                blob_1.2.4                  lmtest_0.9-40              
 [97] S7_0.2.0                    XVector_0.46.0              htmltools_0.5.8.1          
[100] dotCall64_1.2               ProtGenerics_1.38.0         scales_1.4.0               
[103] png_0.1-8                   spatstat.univar_3.1-4       knitr_1.50                 
[106] rstudioapi_0.17.1           reshape2_1.4.4              rjson_0.2.23               
[109] checkmate_2.3.3             nlme_3.1-167                curl_7.0.0                 
[112] zoo_1.8-14                  cachem_1.1.0                stringr_1.5.2              
[115] KernSmooth_2.23-26          parallel_4.4.3              miniUI_0.1.2               
[118] foreign_0.8-88              restfulr_0.0.16             pillar_1.11.1              
[121] grid_4.4.3                  vctrs_0.6.5                 RANN_2.6.2                 
[124] promises_1.3.3              xtable_1.8-4                cluster_2.1.8              
[127] htmlTable_2.4.3             evaluate_1.0.5              cli_3.6.5                  
[130] compiler_4.4.3              Rsamtools_2.22.0            rlang_1.1.6                
[133] crayon_1.5.3                future.apply_1.20.0         labeling_0.4.3             
[136] plyr_1.8.9                  stringi_1.8.7               viridisLite_0.4.2          
[139] deldir_2.0-4                BiocParallel_1.40.0         Biostrings_2.74.1          
[142] lazyeval_0.2.2              spatstat.geom_3.6-0         Matrix_1.7-4               
[145] BSgenome_1.74.0             RcppHNSW_0.6.0              bit64_4.6.0-1              
[148] KEGGREST_1.46.0             shiny_1.11.1                SummarizedExperiment_1.36.0
[151] ROCR_1.0-11                 igraph_2.1.4                memoise_2.0.1              
[154] bslib_0.9.0                 fastmatch_1.1-6             bit_4.6.0                  
LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KYGBge3J9DQppbnN0YWxsLnBhY2thZ2VzKCJTaWduYWMiKSAjU2V1cmF0IGFkZG9uIGZvciBhbmFseXppbmcgY2hyb21hdGluDQpgYGANCg0KYGBge3J9DQpsaWJyYXJ5KGhkZjVyKSAjbmVlZCB0byByZWFkIGg1IGZpbGVzDQpsaWJyYXJ5KFNldXJhdCkNCmxpYnJhcnkoU2lnbmFjKQ0KYGBgDQoNCmBgYHtyfQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShwYXRjaHdvcmspDQpgYGANCg0KYGBge3J9DQpzZXR3ZCgiQzpcXHNpbmdsZWNlbGxfYXRhYyIpDQpnZXR3ZCgpDQpgYGANCiMgUHJlLXByb2Nlc3Npbmcgd29ya2Zsb3cNCg0KYGBge3J9DQpjb3VudHMgPC0gUmVhZDEwWF9oNSgiR1NFMTkwNDI0X1JBV1xcQWdlZFxcR1NNNTcyMzYzMl9BZ2VkX0hTQ19maWx0ZXJlZF9wZWFrX2JjX21hdHJpeC5oNSIpDQpgYGANCg0KYGBge3J9DQojIGNvdW50cyBpcyBhIGZlYXR1cmUgYnkgY2VsbCBtYXRyaXgsIGhlcmUgZmVhdHVyZXMgYXJlIGNvb3JkaW5hdGVzIG9mIHBlYWtzLg0KY291bnRzICMgMTY3NzcxIGZlYXR1cmVzIHggMzY5NCBjZWxscw0KYGBgDQoNCmBgYHtyfQ0KbWV0YSA8LSByZWFkLmNzdigiR1NFMTkwNDI0X1JBV1xcQWdlZFxcR1NNNTcyMzYzMl9BZ2VkX0hTQ19zaW5nbGVjZWxsLmNzdi5neiIsDQogICAgICAgICAgICAgICAgIGhlYWRlcj1UUlVFLA0KICAgICAgICAgICAgICAgICByb3cubmFtZXMgPSAxKSANCg0KbWV0YQ0KYGBgDQoNCg0KYGBge3J9DQoNCiAgY2hyb21fYXNzYXkgPC0gQ3JlYXRlQ2hyb21hdGluQXNzYXkoDQogIGNvdW50cyA9IGNvdW50cywNCiAgc2VwID0gYygiOiIsICItIiksICMgZmVhdHVyZXMgKGNocjE6MzY3MDQ0NC0zNjcyNzUzLCBsb29rIGluIGNvdW50cykgYXJlIHNlcCBieSA6IGFuZCAsDQogIGdlbm9tZSA9ICdtbTEwJywgDQogIGZyYWdtZW50cyA9ICdHU0UxOTA0MjRfUkFXXFxBZ2VkXFxHU001NzIzNjMyX0FnZWRfSFNDX2ZyYWdtZW50cy50c3YuZ3onLA0KICBtaW4uY2VsbHMgPSAxMCwgIyBLZWVwIHBlYWtzIGZvdW5kIGluIOKJpTEwIGNlbGxzLg0KICBtaW4uZmVhdHVyZXMgPSAyMDAgIyBLZWVwIGNlbGxzIHdpdGgg4omlMjAwIHBlYWtzDQopDQpgYGANCg0KYGBge3J9DQojIE5vdGVzOg0KIyANCiMgTWFrZSBzdXJlIGZyYWdtZW50cyBhbmQgaXRzIGluZGV4IGFyZSBpbiBzYW1lIGZvbGRlcg0KIyBOYW1lcyBvZiBib3RoIGZpbGVzIHNob3VsZCBtYXRjaCBleGNlcHQgZm9yIHRoZSAudGJpDQojIGZvciBleGFtcGxlOiBzZWUgYmVsb3cNCmBgYA0KDQpgYGB7cn0NCmxpc3QuZmlsZXMoIkdTRTE5MDQyNF9SQVdcXEFnZWQiKQ0KYGBgDQoNCg0KYGBge3J9DQoNCmRhdGEgPC0gQ3JlYXRlU2V1cmF0T2JqZWN0KA0KICBjb3VudHMgPSBjaHJvbV9hc3NheSwNCiAgYXNzYXkgPSAicGVha3MiLA0KICBtZXRhLmRhdGEgPSBtZXRhDQopDQpgYGANCg0KDQpgYGB7cn0NCmRhdGENCmBgYA0KYGBge3J9DQpkYXRhW1tdXQ0KYGBgDQoNCmBgYHtyfQ0KDQppZiAoIXJlcXVpcmUoIkJpb2NNYW5hZ2VyIiwgcXVpZXRseSA9IFRSVUUpKQ0KICAgIGluc3RhbGwucGFja2FnZXMoIkJpb2NNYW5hZ2VyIikNCg0KQmlvY01hbmFnZXI6Omluc3RhbGwoIkVuc0RiLk1tdXNjdWx1cy52NzkiKSAjIEVuc0RiLkhzYXBpZW5zLnY4NiBmb3IgaHVtYW4NCkJpb2NNYW5hZ2VyOjppbnN0YWxsKCJHZW5vbWVJbmZvRGIiKSAjdHJhbnNsYXRpb24gYmV0d2VlbiBjaHJvbW9zb21lIG5hbWVzDQpCaW9jTWFuYWdlcjo6aW5zdGFsbCgiYmlvdml6QmFzZSIpDQpgYGANCg0KYGBge3J9DQpsaWJyYXJ5KEVuc0RiLk1tdXNjdWx1cy52NzkpDQpsaWJyYXJ5KEdlbm9tZUluZm9EYikNCmBgYA0KDQpgYGB7cn0NCiMgZ2V0IGFsbCBhbm5vdGF0ZWQgbW91c2UgZ2VuZXMgZnJvbSBFbnNlbWJsLWJhc2VkIGFubm90YXRpb24gZGF0YWJhc2UNCg0KYW5ub3RhdGlvbnMgPC0gR2V0R1Jhbmdlc0Zyb21FbnNEYihlbnNkYiA9IEVuc0RiLk1tdXNjdWx1cy52NzkpDQpzZXFsZXZlbHNTdHlsZShhbm5vdGF0aW9ucykgPC0gJ1VDU0MnDQoNCiMgTm90ZTogZmVhdHVyZXMgaGF2ZSBjaHIxIHByZWZpeCB3aGljaCBpcyBVQ1NDLXN0eWxlIGNocm9tb3NvbWUgbmFtZXMuIA0KYGBgDQoNCmBgYHtyfQ0KYW5ub3RhdGlvbnMNCmBgYA0KDQpgYGB7cn0NCkFubm90YXRpb24oZGF0YSkgPC0gYW5ub3RhdGlvbnMNCmBgYA0KDQojIENvbXB1dGluZyBRQyBNZXRyaWNzDQoNCmBgYHtyfQ0KIyAxLiBMb29rIGF0IHRoZSBmcmFnbWVudCBsZW5ndGggcGVyaW9kaWNpdHkgZm9yIGFsbCB0aGUgY2VsbHMNCmRhdGEgPC0gTnVjbGVvc29tZVNpZ25hbChvYmplY3QgPSBkYXRhKQ0KYGBgDQpgYGB7cn0NCiMgTm90ZToNCiMgU2lnbmFjIGxvb2tzIGF0IGFsbCBmcmFnbWVudHMgaW4gZWFjaCBjZWxsIGFuZCBiaW5zIHRoZW0gYnkgbGVuZ3RoOg0KIyBGcmFnbWVudCBsZW5ndGggIENhdGVnb3J5DQojIDDigJMxMDAgYnAJTnVjbGVvc29tZS1mcmVlIChORlIpDQojIDE4MOKAkzI0NyBicAlNb25vbnVjbGVvc29tYWwNCiMgMzE14oCTNDczIGJwCURpbnVjbGVvc29tYWwNCiMgLi4uLi4uLi4uICAgLi4uLi4uLi4uLi4uLg0KDQojIFRoZW4gY2FsY3VsYXRlIG1vbm9udWNsZW9zb21hbC8gbnVjbGVvc29tZS1mcmVlIHJhdGlvDQoNCiAgDQpgYGANCg0KYGBge3J9DQpkYXRhJG51Y2xlb3NvbWVfZ3JvdXAgPC0gaWZlbHNlKGRhdGEkbnVjbGVvc29tZV9zaWduYWwgPiA0LCAnTlMgPiA0JywgJ05TIDwgNCcpDQp1bmlxdWUoZGF0YSRudWNsZW9zb21lX2dyb3VwKQ0KDQojIG5vIGxvdy1xdWFsaXR5IGNlbGxzIGRvbWluYXRlZCBieSBtb25vbnVjbGVvc29tYWwgZnJhZ21lbnRzLg0KYGBgDQoNCmBgYHtyfQ0KRnJhZ21lbnRIaXN0b2dyYW0ob2JqZWN0ID0gZGF0YSwgDQogICAgICAgICAgICAgICAgICBncm91cC5ieSA9ICdudWNsZW9zb21lX2dyb3VwJywgDQogICAgICAgICAgICAgICAgICByZWdpb24gPSAnY2hyMS0xLTEwMDAwMDAwJykNCg0KI05vdGU6DQojIGNlbGxzIGV4aGliaXQgYSBwYXR0ZXJuIHRoYXQgaXMgdHlwaWNhbCBmb3IgYSBzdWNjZXNzZnVsIEFUQUMtc2VxIGV4cGVyaW1lbnQuDQoNCmBgYA0KDQpgYGB7cn0NCiMgMi4gQ2FsY3VsYXRlIHRoZSBUU1MgZW5yaWNobWVudCBzY29yZSBmb3IgZWFjaCBjZWxsDQpkYXRhIDwtIFRTU0VucmljaG1lbnQoZGF0YSwgZmFzdCA9IEZBTFNFKQ0KYGBgDQoNCg0KYGBge3J9DQojIDMuIENvbXB1dGUgZnJhY3Rpb24gb2YgcmVhZHMgZnJvbSBibGFja2xpc3RlZCByZWdpb24NCiMgaW4gZGF0YVtbXV0gdGhlcmUgaXMgYSBjb2x1bW4gYmxhY2tsaXN0X3JlZ2lvbl9mcmFnbWVudHMNCiMgbnVtYmVyIG9mIGZyYWdtZW50cyBtYXBwZWQgdG8gYmxhY2sgbGlzdCByZWdpb25zDQpkYXRhJGJsYWNrbGlzdF9yYXRpbyA8LSBkYXRhJGJsYWNrbGlzdF9yZWdpb25fZnJhZ21lbnRzIC8gZGF0YSRwZWFrX3JlZ2lvbl9mcmFnbWVudHMNCmBgYA0KDQpgYGB7cn0NCmRhdGEkcGN0X3JlYWRzX2luX3BlYWtzIDwtIGRhdGEkcGVha19yZWdpb25fZnJhZ21lbnRzIC8gZGF0YSRwYXNzZWRfZmlsdGVycyAqIDEwMCANCmBgYA0KDQoNCmBgYHtyfQ0KdmxuIDwtIFZsblBsb3QoDQogIG9iamVjdCA9IGRhdGEsDQogIGZlYXR1cmVzID0gYygncGVha19yZWdpb25fZnJhZ21lbnRzJywgJ3BjdF9yZWFkc19pbl9wZWFrcycsIA0KICAgICAgICAgICAgICAgICdibGFja2xpc3RfcmF0aW8nLCAnbnVjbGVvc29tZV9zaWduYWwnLCAnVFNTLmVucmljaG1lbnQnKSwNCiAgcHQuc2l6ZSA9IDAuMSwNCiAgbmNvbCA9IDUNCikNCnZsbg0KYGBgDQoNCiMgUmVtb3ZlIGNlbGxzIHRoYXQgYXJlIG91dGxpZXJzIGZvciB0aGVzZSBRQyBtZXRyaWNzDQoNCmBgYHtyfQ0KZGF0YQ0KYGBgDQoNCmBgYHtyfQ0KIyBvcHRpb24gMTogU2V0IG1hbnVhbCB0aHJlc2hvbGRzYmFzZWQgb24gdGhlIHZpb2xpbiBwbG90IA0KZGF0YV9maWx0ZXJlZCA8LSBzdWJzZXQoDQogIHggPSBkYXRhLA0KICBzdWJzZXQgPSBwZWFrX3JlZ2lvbl9mcmFnbWVudHMgPiAzMDAwICYNCiAgICBwZWFrX3JlZ2lvbl9mcmFnbWVudHMgPCA0MDAwMCAmDQogICAgcGN0X3JlYWRzX2luX3BlYWtzID4gNjAgJg0KICAgIGJsYWNrbGlzdF9yYXRpbyA8IDAuMDIgJg0KICAgIG51Y2xlb3NvbWVfc2lnbmFsIDwgNCAmIA0KICAgIFRTUy5lbnJpY2htZW50ID4gMg0KKQ0KDQpkYXRhX2ZpbHRlcmVkDQpgYGANCmBgYHtyfQ0KIyBPcHRpb24gMjogQmFzZWQgb24gcXVhbnRpbGVzDQpsb3dfcHJmIDwtIHF1YW50aWxlKGRhdGFbWyJwZWFrX3JlZ2lvbl9mcmFnbWVudHMiXV0kcGVha19yZWdpb25fZnJhZ21lbnRzLCBwcm9icyA9IDAuMDIpDQpoaWdfcHJmIDwtIHF1YW50aWxlKGRhdGFbWyJwZWFrX3JlZ2lvbl9mcmFnbWVudHMiXV0kcGVha19yZWdpb25fZnJhZ21lbnRzLCBwcm9icyA9IDAuOTgpDQoNCmxvd19wcnAgPC0gcXVhbnRpbGUoZGF0YVtbInBjdF9yZWFkc19pbl9wZWFrcyJdXSRwY3RfcmVhZHNfaW5fcGVha3MsIHByb2JzID0gMC4wMikNCg0KaGlnaF9ibHIgPC0gcXVhbnRpbGUoZGF0YVtbImJsYWNrbGlzdF9yYXRpbyJdXSRibGFja2xpc3RfcmF0aW8sIHByb2JzID0gMC45OCkNCg0KaGlnX25zIDwtIHF1YW50aWxlKGRhdGFbWyJudWNsZW9zb21lX3NpZ25hbCJdXSRudWNsZW9zb21lX3NpZ25hbCwgcHJvYnMgPSAwLjk4KQ0KDQpsb3dfdHMgPC0gcXVhbnRpbGUoZGF0YVtbIlRTUy5lbnJpY2htZW50Il1dJFRTUy5lbnJpY2htZW50LCBwcm9icyA9IDAuMDIpDQpgYGANCg0KYGBge3J9DQpwcmludChsb3dfcHJmKQ0KcHJpbnQoaGlnX3ByZikNCnByaW50KGxvd19wcnApDQpwcmludChoaWdoX2JscikNCnByaW50KGhpZ19ucykNCnByaW50KGxvd190cykNCmBgYA0KDQpgYGB7cn0NCmRhdGEgPC0gc3Vic2V0KA0KICB4ID0gZGF0YSwNCiAgc3Vic2V0ID0gcGVha19yZWdpb25fZnJhZ21lbnRzID4gbG93X3ByZiAmDQogICAgcGVha19yZWdpb25fZnJhZ21lbnRzIDwgaGlnX3ByZiAmDQogICAgcGN0X3JlYWRzX2luX3BlYWtzID4gbG93X3BycCAmDQogICAgYmxhY2tsaXN0X3JhdGlvIDwgaGlnaF9ibHIgJg0KICAgIG51Y2xlb3NvbWVfc2lnbmFsIDwgaGlnX25zICYNCiAgICBUU1MuZW5yaWNobWVudCA+IGxvd190cw0KKQ0KZGF0YQ0KYGBgDQojIE5vcm1hbGl6YXRpb24gYW5kIGxpbmVhciBkaW1lbnNpb25hbCByZWR1Y3Rpb24NCg0KYGBge3J9DQpkYXRhIDwtIFJ1blRGSURGKGRhdGEpDQpgYGANCg0KYGBge3J9DQpkYXRhIDwtIEZpbmRUb3BGZWF0dXJlcyhkYXRhLCBtaW4uY3V0b2ZmID0gJ3EwJykNCmRhdGENCmBgYA0KDQpgYGB7cn0NCmRhdGEgPC0gUnVuU1ZEKGRhdGEpDQpgYGANCg0KYGBge3J9DQpEZXB0aENvcihkYXRhKQ0KYGBgDQpgYGB7cn0NCiMgTm90ZToNCiMgQ29tcG9uZW50IDEgaXMgc3Ryb25nbHkgY29ycmVsYXRlZCB0byBzZXF1ZW5jaW5nIGRlcHRoICAodGVjaG5pY2FsIHZhcmlhdGlvbikuDQojIHJhdGhlciB0aGFuIGJpb2xvZ2ljYWwgdmFyaWF0aW9uDQojIFJlbW92ZSB0aGlzIGNvbXBvbmVudA0KYGBgDQoNCiMgTm9uLWxpbmVhciBkaW1lbnNpb24gcmVkdWN0aW9uIGFuZCBjbHVzdGVyaW5nDQoNCmBgYHtyfQ0KZGF0YSA8LSBSdW5VTUFQKA0KICBvYmplY3QgPSBkYXRhLA0KICByZWR1Y3Rpb24gPSAnbHNpJywNCiAgZGltcyA9IDI6MzANCikNCg0KZGF0YSA8LSBGaW5kTmVpZ2hib3JzKA0KICBvYmplY3QgPSBkYXRhLA0KICByZWR1Y3Rpb24gPSAnbHNpJywNCiAgZGltcyA9IDI6MzANCikNCg0KZGF0YSA8LSBGaW5kQ2x1c3RlcnMoDQogIG9iamVjdCA9IGRhdGEsDQogIGFsZ29yaXRobSA9IDMsDQogIHZlcmJvc2UgPSBGQUxTRQ0KKQ0KDQpgYGANCg0KDQpgYGB7cn0NCkRpbVBsb3Qob2JqZWN0ID0gZGF0YSwgbGFiZWwgPSBUUlVFLCBwdC5zaXplID0gMSkgKyBOb0xlZ2VuZCgpDQpgYGANCg0KYGBge3J9DQojIFVzaW5nIGRhdGFfZmlsdGVyZWQNCg0KZGF0YV9maWx0ZXJlZCA8LSBSdW5URklERihkYXRhX2ZpbHRlcmVkKQ0KZGF0YV9maWx0ZXJlZCA8LSBGaW5kVG9wRmVhdHVyZXMoZGF0YV9maWx0ZXJlZCwgbWluLmN1dG9mZiA9ICdxMCcpDQpkYXRhX2ZpbHRlcmVkIDwtIFJ1blNWRChvYmplY3QgPSBkYXRhX2ZpbHRlcmVkKQ0KDQpEZXB0aENvcihkYXRhX2ZpbHRlcmVkKQ0KYGBgDQoNCmBgYHtyfQ0KZGF0YV9maWx0ZXJlZCA8LSBSdW5VTUFQKA0KICBvYmplY3QgPSBkYXRhX2ZpbHRlcmVkLA0KICByZWR1Y3Rpb24gPSAnbHNpJywNCiAgZGltcyA9IDI6MzANCikNCmRhdGFfZmlsdGVyZWQgPC0gRmluZE5laWdoYm9ycygNCiAgb2JqZWN0ID0gZGF0YV9maWx0ZXJlZCwNCiAgcmVkdWN0aW9uID0gJ2xzaScsDQogIGRpbXMgPSAyOjMwDQopDQpkYXRhX2ZpbHRlcmVkIDwtIEZpbmRDbHVzdGVycygNCiAgb2JqZWN0ID0gZGF0YV9maWx0ZXJlZCwNCiAgYWxnb3JpdGhtID0gMywNCiAgcmVzb2x1dGlvbiA9IDEuMiwNCiAgdmVyYm9zZSA9IEZBTFNFDQopDQoNCkRpbVBsb3Qob2JqZWN0ID0gZGF0YV9maWx0ZXJlZCwgbGFiZWwgPSBUUlVFLCBwdC5zaXplID0gMSkgKyBOb0xlZ2VuZCgpDQpgYGANCg0KYGBge3J9DQojIE5vdGU6DQojIE9uZSBwcmltYXJ5IGNsdXN0ZXIgLSBiZWNhdXNlIGRhdGEgaXMgZnJvbSBhZ2VkIG1pY2UNCiMgTWFueSBzdWJjbHN1dGVycyB3aXRoaW4gbWFpbiBjbHVzdGVyDQpgYGANCg0KIyBNdWx0aXBsZSBzYW1wbGVzDQoNCmBgYHtyfQ0KIyBGdW5jdGlvbiB3aXRoIGFsbCB0aGUgcHJlcHJvY2Vzc2luZyBzdGVwcyBhbmQgaW5mb3JtYXRpdmUgcHJpbnQgbWVzc2FnZXMNCnByZXBhcmVfZGF0YSA8LSBmdW5jdGlvbihjb3VudF9wYXRoLCBtZXRhX3BhdGgsIGZyYWdtZW50X3BhdGgpew0KICANCiAgbWVzc2FnZSgiU3RlcCAxOiBSZWFkaW5nIGNvdW50IGRhdGEuLi4iKQ0KICBjb3VudHMgPC0gUmVhZDEwWF9oNShjb3VudF9wYXRoKQ0KICBtZXNzYWdlKCJDb3VudCBkYXRhIGxvYWRlZCBzdWNjZXNzZnVsbHkuIikNCiAgDQogIG1lc3NhZ2UoIlN0ZXAgMjogUmVhZGluZyBtZXRhZGF0YS4uLiIpDQogIG1ldGEgPC0gcmVhZC5jc3YobWV0YV9wYXRoLA0KICAgICAgICAgICAgICAgICAgIGhlYWRlciA9IFRSVUUsDQogICAgICAgICAgICAgICAgICAgcm93Lm5hbWVzID0gMSkNCiAgbWVzc2FnZSgiTWV0YWRhdGEgbG9hZGVkIHN1Y2Nlc3NmdWxseS4iKQ0KICANCiAgbWVzc2FnZSgiU3RlcCAzOiBDcmVhdGluZyBDaHJvbWF0aW5Bc3NheSBvYmplY3QuLi4iKQ0KICBjaHJvbV9hc3NheSA8LSBDcmVhdGVDaHJvbWF0aW5Bc3NheSgNCiAgICBjb3VudHMgPSBjb3VudHMsDQogICAgc2VwID0gYygiOiIsICItIiksDQogICAgZ2Vub21lID0gJ21tMTAnLA0KICAgIGZyYWdtZW50cyA9IGZyYWdtZW50X3BhdGgsDQogICAgbWluLmNlbGxzID0gMTAsDQogICAgbWluLmZlYXR1cmVzID0gMjAwDQogICkNCiAgbWVzc2FnZSgiQ2hyb21hdGluQXNzYXkgY3JlYXRlZCBzdWNjZXNzZnVsbHkuIikNCiAgDQogIG1lc3NhZ2UoIlN0ZXAgNDogQ3JlYXRpbmcgU2V1cmF0IG9iamVjdC4uLiIpDQogIGRhdGEgPC0gQ3JlYXRlU2V1cmF0T2JqZWN0KA0KICAgIGNvdW50cyA9IGNocm9tX2Fzc2F5LA0KICAgIGFzc2F5ID0gInBlYWtzIiwNCiAgICBtZXRhLmRhdGEgPSBtZXRhDQogICkNCiAgbWVzc2FnZSgiU2V1cmF0IG9iamVjdCBjcmVhdGVkIHN1Y2Nlc3NmdWxseS4iKQ0KICANCiAgbWVzc2FnZSgiU3RlcCA1OiBBbm5vdGF0aW5nIGRhdGEuLi4iKQ0KICBBbm5vdGF0aW9uKGRhdGEpIDwtIGFubm90YXRpb25zDQogIG1lc3NhZ2UoIkFubm90YXRpb24gY29tcGxldGVkLiIpDQogIA0KICBtZXNzYWdlKCJTdGVwIDY6IENvbXB1dGluZyBRQyBtZXRyaWNzIChudWNsZW9zb21lIHNpZ25hbCwgVFNTIGVucmljaG1lbnQsIGJsYWNrbGlzdCByYXRpbywgJSByZWFkcyBpbiBwZWFrcykuLi4iKQ0KICBkYXRhIDwtIE51Y2xlb3NvbWVTaWduYWwob2JqZWN0ID0gZGF0YSkNCiAgZGF0YSA8LSBUU1NFbnJpY2htZW50KG9iamVjdCA9IGRhdGEsIGZhc3QgPSBGQUxTRSkNCiAgZGF0YSRibGFja2xpc3RfcmF0aW8gPC0gZGF0YSRibGFja2xpc3RfcmVnaW9uX2ZyYWdtZW50cyAvIGRhdGEkcGVha19yZWdpb25fZnJhZ21lbnRzDQogIGRhdGEkcGN0X3JlYWRzX2luX3BlYWtzIDwtIGRhdGEkcGVha19yZWdpb25fZnJhZ21lbnRzIC8gZGF0YSRwYXNzZWRfZmlsdGVycyAqIDEwMA0KICBtZXNzYWdlKCJRQyBtZXRyaWNzIGNvbXB1dGF0aW9uIGNvbXBsZXRlZC4iKQ0KICANCiAgbWVzc2FnZSgiU3RlcCA3OiBDYWxjdWxhdGluZyBmaWx0ZXJpbmcgdGhyZXNob2xkcy4uLiIpDQogIGxvd19wcmYgPC0gcXVhbnRpbGUoZGF0YVtbInBlYWtfcmVnaW9uX2ZyYWdtZW50cyJdXSRwZWFrX3JlZ2lvbl9mcmFnbWVudHMsIHByb2JzID0gMC4wMikNCiAgaGlnX3ByZiA8LSBxdWFudGlsZShkYXRhW1sicGVha19yZWdpb25fZnJhZ21lbnRzIl1dJHBlYWtfcmVnaW9uX2ZyYWdtZW50cywgcHJvYnMgPSAwLjk4KQ0KICBsb3dfcHJwIDwtIHF1YW50aWxlKGRhdGFbWyJwY3RfcmVhZHNfaW5fcGVha3MiXV0kcGN0X3JlYWRzX2luX3BlYWtzLCBwcm9icyA9IDAuMDIpDQogIGhpZ2hfYmxyIDwtIHF1YW50aWxlKGRhdGFbWyJibGFja2xpc3RfcmF0aW8iXV0kYmxhY2tsaXN0X3JhdGlvLCBwcm9icyA9IDAuOTgpDQogIGhpZ19ucyA8LSBxdWFudGlsZShkYXRhW1sibnVjbGVvc29tZV9zaWduYWwiXV0kbnVjbGVvc29tZV9zaWduYWwsIHByb2JzID0gMC45OCkNCiAgbG93X3RzIDwtIHF1YW50aWxlKGRhdGFbWyJUU1MuZW5yaWNobWVudCJdXSRUU1MuZW5yaWNobWVudCwgcHJvYnMgPSAwLjAyKQ0KICBtZXNzYWdlKCJGaWx0ZXJpbmcgdGhyZXNob2xkcyBjYWxjdWxhdGVkLiIpDQogIA0KICBtZXNzYWdlKCJTdGVwIDg6IEZpbHRlcmluZyBkYXRhIGJhc2VkIG9uIFFDIHRocmVzaG9sZHMuLi4iKQ0KICBkYXRhIDwtIHN1YnNldCgNCiAgICB4ID0gZGF0YSwNCiAgICBzdWJzZXQgPSBwZWFrX3JlZ2lvbl9mcmFnbWVudHMgPiBsb3dfcHJmICYNCiAgICAgIHBlYWtfcmVnaW9uX2ZyYWdtZW50cyA8IGhpZ19wcmYgJg0KICAgICAgcGN0X3JlYWRzX2luX3BlYWtzID4gbG93X3BycCAmDQogICAgICBibGFja2xpc3RfcmF0aW8gPCBoaWdoX2JsciAmDQogICAgICBudWNsZW9zb21lX3NpZ25hbCA8IGhpZ19ucyAmDQogICAgICBUU1MuZW5yaWNobWVudCA+IGxvd190cw0KICApDQogIG1lc3NhZ2UoIkRhdGEgZmlsdGVyaW5nIGNvbXBsZXRlZC4iKQ0KICANCiAgbWVzc2FnZSgiQWxsIHByZXByb2Nlc3Npbmcgc3RlcHMgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4iKQ0KICANCiAgcmV0dXJuKGRhdGEpDQp9DQoNCmBgYA0KDQoNCmBgYHtyfQ0KYWdlZCA8LSBwcmVwYXJlX2RhdGEoIkdTRTE5MDQyNF9SQVdcXEFnZWRcXEdTTTU3MjM2MzJfQWdlZF9IU0NfZmlsdGVyZWRfcGVha19iY19tYXRyaXguaDUiLA0KICAgICAgICAgICAgICAgICAgICAgIkdTRTE5MDQyNF9SQVdcXEFnZWRcXEdTTTU3MjM2MzJfQWdlZF9IU0Nfc2luZ2xlY2VsbC5jc3YuZ3oiLA0KICAgICAgICAgICAgICAgICAgICAgIkdTRTE5MDQyNF9SQVdcXEFnZWRcXEdTTTU3MjM2MzJfQWdlZF9IU0NfZnJhZ21lbnRzLnRzdi5neiINCiAgICAgICAgICAgICAgICAgICAgICkNCmBgYA0KYGBge3J9DQp5b3VuZyA8LSBwcmVwYXJlX2RhdGEoIkdTRTE5MDQyNF9SQVdcXFlvdW5nXFxHU001NzIzNjMxX1lvdW5nX0hTQ19maWx0ZXJlZF9wZWFrX2JjX21hdHJpeC5oNSIsDQogICAgICAgICAgICAgICAgICAgICAiR1NFMTkwNDI0X1JBV1xcWW91bmdcXEdTTTU3MjM2MzFfWW91bmdfSFNDX3NpbmdsZWNlbGwuY3N2Lmd6IiwNCiAgICAgICAgICAgICAgICAgICAgICJHU0UxOTA0MjRfUkFXXFxZb3VuZ1xcR1NNNTcyMzYzMV9Zb3VuZ19IU0NfZnJhZ21lbnRzLnRzdi5neiINCiAgICAgICAgICAgICAgICAgICAgICkNCmBgYA0KDQpgYGB7cn0NCiMgQWRkIG5ldyBjb2x1bW4gdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIHNhbXBsZSBhZ2VkIGFuZCB5b3VuZw0KeW91bmckc2FtcGxlIDwtICJ5b3VuZyINCmFnZWQkc2FtcGxlIDwtICJhZ2VkIg0KYGBgDQoNCmBgYHtyfQ0KYWdlZFtbXV0NCnlvdW5nW1tdXQ0KYGBgDQoNCg0KYGBge3J9DQpjb21iaW5lZF9kYXRhIDwtIG1lcmdlKHlvdW5nLCBhZ2VkKQ0KYGBgDQoNCmBgYHtyfQ0KY29tYmluZWRfZGF0YSA8LSBSdW5URklERihjb21iaW5lZF9kYXRhKQ0KY29tYmluZWRfZGF0YSA8LSBGaW5kVG9wRmVhdHVyZXMoY29tYmluZWRfZGF0YSwgbWluLmN1dG9mZiA9ICdxMCcpDQpjb21iaW5lZF9kYXRhIDwtIFJ1blNWRChvYmplY3QgPSBjb21iaW5lZF9kYXRhKQ0KYGBgDQoNCmBgYHtyfQ0KRGVwdGhDb3IoY29tYmluZWRfZGF0YSkNCmBgYA0KDQpgYGB7cn0NCmNvbWJpbmVkX2RhdGEgPC0gUnVuVU1BUChvYmplY3QgPSBjb21iaW5lZF9kYXRhLCByZWR1Y3Rpb24gPSAnbHNpJywgZGltcyA9IDI6MzApDQpjb21iaW5lZF9kYXRhIDwtIEZpbmROZWlnaGJvcnMob2JqZWN0ID0gY29tYmluZWRfZGF0YSwgcmVkdWN0aW9uID0gJ2xzaScsIGRpbXMgPSAyOjMwKQ0KYGBgDQoNCmBgYHtyfQ0KY29tYmluZWRfZGF0YSA8LSBGaW5kQ2x1c3RlcnMob2JqZWN0ID0gY29tYmluZWRfZGF0YSwgdmVyYm9zZSA9IEZBTFNFLCBhbGdvcml0aG0gPSAzLCByZXNvbHV0aW9uID0gLjQpDQpgYGANCg0KDQpgYGB7cn0NCkRpbVBsb3Qob2JqZWN0ID0gY29tYmluZWRfZGF0YSwgbGFiZWwgPSBUUlVFKSArIE5vTGVnZW5kKCkNCmBgYA0KDQpgYGB7cn0NCkRpbVBsb3Qob2JqZWN0ID0gY29tYmluZWRfZGF0YSwgbGFiZWwgPSBUUlVFLCBncm91cC5ieSA9ICJzYW1wbGUiKSArIE5vTGVnZW5kKCkNCmBgYA0KDQojIERhdGEgQW5hbHlzaXMNCg0KYGBge3J9DQojIDEuIENyZWF0ZSBhIGdlbmUgYWN0aXZpdHkgbWF0cml4IG9yIHNjb3Jlcw0KIyBFc3RpbWF0ZSBnZW5lIGV4cHJlc3Npb24tbGlrZSB2YWx1ZXMgZnJvbSBvcGVuIGNocm9tYXRpbiByZWdpb25zIChwZWFrcykNCiMgRWFjaCBlbnRyeSBlcHJlc2VudHMgdGhlIGdlbmUgYWN0aXZpdHkgc2NvcmUgZm9yIHRoYXQgZ2VuZSBpbiB0aGF0IGNlbGwuDQoNCmdlbmUuYWN0aXZpdGllcyA8LSBHZW5lQWN0aXZpdHkoY29tYmluZWRfZGF0YSkNCmBgYA0KDQpgYGB7cn0NCiMgZ2VuZS5hY3Rpdml0aWVzDQojIGFkZCB0aGUgZ2VuZSBhY3Rpdml0eSBtYXRyaXggdG8gdGhlIFNldXJhdCBvYmplY3QgYXMgYSBuZXcgYXNzYXkNCmNvbWJpbmVkX2RhdGFbWydSTkEnXV0gPC0gQ3JlYXRlQXNzYXlPYmplY3QoY291bnRzID0gZ2VuZS5hY3Rpdml0aWVzKQ0KDQpgYGANCg0KYGBge3J9DQojIE5vcm1hbGl6ZQ0KY29tYmluZWRfZGF0YSA8LSBOb3JtYWxpemVEYXRhKA0KICBvYmplY3QgPSBjb21iaW5lZF9kYXRhLA0KICBhc3NheSA9ICdSTkEnLA0KICBub3JtYWxpemF0aW9uLm1ldGhvZCA9ICdMb2dOb3JtYWxpemUnLA0KICBzY2FsZS5mYWN0b3IgPSBtZWRpYW4oY29tYmluZWRfZGF0YSRuQ291bnRfUk5BKQ0KKQ0KYGBgDQpgYGB7cn0NCmNvbWJpbmVkX2RhdGFbWyJSTkEiXV0NCmBgYA0KDQpgYGB7cn0NCmNvbWJpbmVkX2RhdGFbWyJwZWFrcyJdXQ0KYGBgDQpgYGB7cn0NCmNvbWJpbmVkX2RhdGENCmBgYA0KDQoNCmBgYHtyfQ0KRGVmYXVsdEFzc2F5KGNvbWJpbmVkX2RhdGEpDQpgYGANCmBgYHtyfQ0KIyBTZXQgUk5BIGFzIGRlZmF1bHQgYXNzYXkgDQpEZWZhdWx0QXNzYXkoY29tYmluZWRfZGF0YSkgPC0gJ1JOQScNCmBgYA0KDQoNCmBgYHtyfQ0KIyBQbGl0IGV4cHJlc3Npb24gb2YgZ2VuZXMgaW4gZWFjaCBjbHVzdGVyDQoNCkZlYXR1cmVQbG90KA0KICBvYmplY3QgPSBjb21iaW5lZF9kYXRhLA0KICBmZWF0dXJlcyA9IGMoIkhuZjRnIiwgIlpmaHg0IiwgIlBleDIiLCAiUGtpYSIpLA0KICBtYXguY3V0b2ZmID0gJ3E5NScsDQopDQpgYGANCg0KYGBge3J9DQojIFNldCBkZWZhdWx0IGFzc2F5IGJhY2sgdG8gcGVha3MNCkRlZmF1bHRBc3NheShjb21iaW5lZF9kYXRhKSA8LSAncGVha3MnDQpgYGANCg0KDQojIEZpbmQgZGlmZmVyZW50aWFsbHkgYWNjZXNzaWJsZSBwZWFrcyBiZXR3ZWVuIGNsdXN0ZXJzDQoNCmBgYHtyfQ0KIyBwZWFrX3JlZ2lvbl9mcmFnbWVudHM6IHRvdGFsIG51bWJlciBvZiByZWFkcyBvdmVybGFwcGluZyBhbnkgcGVhayBwZXIgY2VsbA0KIyByZWZsZWN0cyBzZXF1ZW5jaW5nIGRlcHRoDQojIGxhdGVudC52YXJzID0gJ3BlYWtfcmVnaW9uX2ZyYWdtZW50cycgYWRqdXN0cyBmb3IgcGVha19yZWdpb25fZnJhZ21lbnRzDQojIFRoaXMgcmVtb3ZlIGJpYXMgZnJvbSBjZWxscyB3aXRoIGhpZ2hlci9sb3dlciBkZXB0aA0KDQojIG1pbi5wY3QgPSAwLjA1IC0gb25seSB0ZXN0IHBlYWtzIHByZXNlbnQgaW4g4omlNSUgb2YgY2VsbHMgaW4gZWl0aGVyIGdyb3VwDQoNCmRhX3BlYWtzIDwtIEZpbmRNYXJrZXJzKA0KICBvYmplY3QgPSBjb21iaW5lZF9kYXRhLA0KICBpZGVudC4xID0gcm93bmFtZXMoY29tYmluZWRfZGF0YVtbXV1bY29tYmluZWRfZGF0YSRzYW1wbGUgPT0gImFnZWQiLF0pLA0KICBpZGVudC4yID0gcm93bmFtZXMoY29tYmluZWRfZGF0YVtbXV1bY29tYmluZWRfZGF0YSRzYW1wbGUgPT0gInlvdW5nIixdKSwNCiAgbWluLnBjdCA9IDAuMDUsIyANCiAgdGVzdC51c2UgPSAnTFInLA0KICBsYXRlbnQudmFycyA9ICdwZWFrX3JlZ2lvbl9mcmFnbWVudHMnDQopDQpgYGANCmBgYHtyfQ0KaGVhZChkYV9wZWFrcykgIyByZWdpb25zIHRoYXQgYXJlIHNpZ25pZmljYW50IGJldHdlZW4geW91bmcgYW5kIGFnZWQgc2FtcGxlcw0KYGBgDQoNCg0KYGBge3J9DQpwbG90MSA8LSBWbG5QbG90KA0KICBvYmplY3QgPSBjb21iaW5lZF9kYXRhLA0KICBmZWF0dXJlcyA9IHJvd25hbWVzKGRhX3BlYWtzKVsxXSwgICAgICAgICAgICAgDQogIHB0LnNpemUgPSAwLjEsICAgICAgICAgICAgICAgICAgIA0KICBncm91cC5ieSA9ICJzYW1wbGUiICAgICAgICAgICAgIA0KKQ0KDQpwbG90MiA8LSBGZWF0dXJlUGxvdCgNCiAgb2JqZWN0ID0gY29tYmluZWRfZGF0YSwNCiAgZmVhdHVyZXMgPSByb3duYW1lcyhkYV9wZWFrcylbMV0sDQogIHB0LnNpemUgPSAwLjEsDQogIG1heC5jdXRvZmYgPSAncTk1Jw0KKQ0KcGxvdDEgfCBwbG90Mg0KDQpgYGANCg0KDQpgYGB7cn0NCiMgRmluZCBnZW5lcyBuZWFyZXN0IHRvIHRoZXNlIHNpZ25pZmljYW50IHJlZ2lvbnMNCkNsb3Nlc3RGZWF0dXJlKGNvbWJpbmVkX2RhdGEsIHJlZ2lvbnMgPSByb3duYW1lcyhkYV9wZWFrcykpDQoNCmBgYA0KDQpgYGB7cn0NCmRhX3BlYWtzJGNsb3Nlc3RfZ2VuZSA8LUNsb3Nlc3RGZWF0dXJlKGNvbWJpbmVkX2RhdGEsIHJlZ2lvbnMgPSByb3duYW1lcyhkYV9wZWFrcykpJGdlbmVfbmFtZQ0KZGFfcGVha3MkZGlzdGFuY2UgPC0gQ2xvc2VzdEZlYXR1cmUoY29tYmluZWRfZGF0YSwgcmVnaW9ucyA9IHJvd25hbWVzKGRhX3BlYWtzKSkkZGlzdGFuY2UNCmBgYA0KDQpgYGB7cn0NCmhlYWQoZGFfcGVha3MpDQpgYGANCg0KYGBge3J9DQpDb3ZlcmFnZVBsb3QoDQogIG9iamVjdCA9IGNvbWJpbmVkX2RhdGEsDQogIHJlZ2lvbiA9IHJvd25hbWVzKGRhX3BlYWtzKVsxXSwNCiAgZXh0ZW5kLnVwc3RyZWFtID0gMTAwMDAsDQogIGV4dGVuZC5kb3duc3RyZWFtID0gNTAwMCwNCiAgZ3JvdXAuYnkgPSAic2FtcGxlIg0KKQ0KYGBgDQpgYGB7cn0NCkNvdmVyYWdlUGxvdCgNCiAgb2JqZWN0ID0gY29tYmluZWRfZGF0YSwNCiAgcmVnaW9uID0gcm93bmFtZXMoZGFfcGVha3MpWzJdLA0KICBleHRlbmQudXBzdHJlYW0gPSAxMDAwMCwNCiAgZXh0ZW5kLmRvd25zdHJlYW0gPSA1MDAwLA0KICBncm91cC5ieSA9ICJzYW1wbGUiDQopDQpgYGANCg0KYGBge3J9DQpwbG90MSA8LSBWbG5QbG90KA0KICBvYmplY3QgPSBjb21iaW5lZF9kYXRhLA0KICBmZWF0dXJlcyA9IHJvd25hbWVzKGRhX3BlYWtzKVsxXSwgICAgICAgICAgICANCiAgcHQuc2l6ZSA9IDAuMSwgICAgICAgICAgICAgICAgICAgDQogIGdyb3VwLmJ5ID0gInNhbXBsZSIgICAgICAgICAgICAgIA0KKQ0KDQpwbG90MiA8LSBGZWF0dXJlUGxvdCgNCiAgb2JqZWN0ID0gY29tYmluZWRfZGF0YSwNCiAgZmVhdHVyZXMgPSByb3duYW1lcyhkYV9wZWFrcylbMV0sDQogIHB0LnNpemUgPSAwLjEsDQogIG1heC5jdXRvZmYgPSAncTk1Jw0KKQ0KcGxvdDEgfCBwbG90Mg0KYGBgDQoNCg0KYGBge3J9DQpwbG90MSA8LSBWbG5QbG90KA0KICBvYmplY3QgPSBjb21iaW5lZF9kYXRhLA0KICBmZWF0dXJlcyA9IHJvd25hbWVzKGRhX3BlYWtzKVsyXSwgICAgICAgICAgICANCiAgcHQuc2l6ZSA9IDAuMSwgICAgICAgICAgICAgICAgICAgDQogIGdyb3VwLmJ5ID0gInNhbXBsZSIgICAgICAgICAgICAgIA0KKQ0KDQpwbG90MiA8LSBGZWF0dXJlUGxvdCgNCiAgb2JqZWN0ID0gY29tYmluZWRfZGF0YSwNCiAgZmVhdHVyZXMgPSByb3duYW1lcyhkYV9wZWFrcylbMl0sDQogIHB0LnNpemUgPSAwLjEsDQogIG1heC5jdXRvZmYgPSAncTk1Jw0KKQ0KcGxvdDEgfCBwbG90Mg0KYGBgDQpgYGB7cn0NCnNlc3Npb25JbmZvKCkNCmBgYA0KDQo=